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.
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();
}
}
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");
}
}
}
}