Enviar Arquivo por FTP

Pessoal, teho que enviar um arquivo TXT para um determinado endereço via FTP em uma determinada porta. Talvez alguém saiba do que se trata, é parte de um sistema da Bosch onde as autorizadas devem enviar dados dos atendimentos.

A informação que recebi foi:

endereço: ftp.sigmanet.com.br
porta: 21
login: boschservice
senha: *****

A senha é igual para todos. Gostaria de fazer em java, se alguém puder dar um help…

isso eram informações sigilosas? :shock:

Olá

Baixe os fontes do livro Pro Jakarta Commons. No capítulo 10 que trata do commons-net tem o seguinte exemplo:

[code]package com.commonsbook.chap10;
import org.apache.commons.net.ftp.*;

import java.io.*;

public class FTPClientTrial {
public static void main(String[] args) {
new FTPClientTrial().useFTP(“ftp.example.com”, “/directory”, “file”,
“username”, “password”);
}

public void useFTP(String ftpserver, String directoryName,
    String filetoUpload, String username, String password) {
    FTPClient ftpClient = new FTPClient();

    try {
        ftpClient.connect(ftpserver);
        System.out.print(ftpClient.getReplyString());

        // check reply code.
        if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
            ftpClient.disconnect();
            System.out.println("Connection refused.");
            return;
        }

        ftpClient.login(username, password);
        System.out.println("Workdir >>" +
            ftpClient.printWorkingDirectory());
        ftpClient.changeWorkingDirectory(directoryName);

        //Store file start
        FileInputStream input = new FileInputStream(filetoUpload);
        ftpClient.storeFile(filetoUpload, input);
        //Store file end
        
        //List all Files and directories
        FTPFile[] files = ftpClient.listFiles();

        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                //If file print name and size
                if (files[i].isFile()) {
                    System.out.println("File >> " + files[i].getName() +
                        "	Size >>" + files[i].getSize());
                }
            }
        }
        System.out.println("getStatus "+ftpClient.getStatus("/www"));
        System.out.println("getSystemName "+ftpClient.getSystemName());
        System.out.println("listHelp "+ftpClient.listHelp());
        System.out.println("listNames "+ftpClient.listNames());
        ftpClient.logout();
        ftpClient.disconnect();
    } catch (IOException e) {
        if (ftpClient.isConnected()) {
            try {
                ftpClient.disconnect();
            } catch (IOException f) {
                // do nothing
            }
        }

        e.printStackTrace();
    }
}

}
[/code]
[]s
Luca

1 curtida

Não. É uma senha padrão.

Boa… :wink:

Onde consigo a biblioteca “import org.apache.commons.net.ftp.*”?

Qual é o arquivo jar que contém essa biblioteca?

Olá

Como disse na minha resposta anterior: Jakarta commons-net

[]s
Luca

Olá pessoal,

O tópico já é antigo (eu achei pesquisando na internet), mas dá pra aproveitá-lo com minha dúvida.
Estou enviando arquivos via FTP com o FTPClient do jakarta.

No momento de enviar o InputStream, ele consegue fazer o store na pasta do servidor FTP normalmente.
Quando vou abrir o novo arquivo na pasta do servidor (no meu exemplo é um pdf), o Adobe Reader informa que há um erro de leitura no arquivo. Se eu abro o arquivo em modo texto (bloco de notas), o conteúdo é o mesmo do original.

Vou postar meu código:

public class TesteFTP {
   private FTPClient ftpClient = new FTPClient();
	private Properties prop = new Properties();
	
	public boolean enviarArquivoViaFTP (Arquivo arquivo) throws IOException {
		File f = // pega o File do meu diretorio original a partir do objeto passado como parametro
		boolean adicionou  = false;
		prop.load(TesteFTP.class.getResourceAsStream("/ftp.properties"));		
		try {
			ftpClient.connect(prop.getProperty("enderecoServidor"));	
				if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {			
					ftpClient.login(prop.getProperty("usuario"), prop.getProperty("senha"));	
					
					FileInputStream fis = new FileInputStream(f);
					BufferedInputStream bis = new BufferedInputStream(fis);					
					
                                        // faz o store no servidor FTP
					adicionou = ftpClient.storeFile(f.getName(), bis);
					
					bis.close();
					fis.close();
					if (adicionou) System.out.println("Arquivo adicionado com sucesso!");			
				} else {
					ftpClient.disconnect();
					System.out.println("Conexao recusada");
					System.exit(1);
		
				}
		} catch (Exception e) {
			System.out.println("Ocorreu um erro: " + e);
		}
		return adicionou;

	}
	
	public static void main(String[] args) throws IOException {
		
		Arquivo a = // traz o objeto arquivo
		System.out.println(a.getServidor());
		if (a.getServidor() != Arquivo.Servidor.X) {			
			if (new TesteFTP().enviarArquivoViaFTP(a)) {
				a.setServidor(Arquivo.Servidor.X);
			} else {
				System.out.println("Nao foi possivel enviar o arquivo");
			}		
		}
	}
}

Grato pela atenção.

Não sei ao certo como cheguei aqui, mas o seu problema provavelmente se resolve usando isso, antes de enviar o arquivo:

ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
1 curtida