Bom galera, dei uma olhada de leve na documentacao da commons net ftp
deu de fazer bastante coisa.
Criei uma classe funcoesFTP
e os metodos
conecta
recebe
envia
disconecta
getPasta
Até funciona com algumas limitações, sao elas:
1 - Não consegui dar um retorno ao usuario sobre o processo q está acontecendo se está enviando, quantos por % foi enviado/recebido, esse tipo de informacao, acredito q seja usando threads pesquisei muito na internet nao entendi o conceito e peguei alguns exemplos mas nao consegui implementar na minha classe.
2 - Quando recebo um arquivo o mesmo fica bloqueado, inacessivel, só depois que a aplicação é fechada eu consigo acessar.
Alguem poderia me ajudar com esses problemas?
segue abaixo minha classe:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package funcoesglobais;
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import javax.swing.JOptionPane;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTPClient;
public class funcoesFTP extends java.lang.Thread {
FTPClient ftp = new FTPClient();
String tx="";
public void Conecta(String txUrl,String txUsuario,String txSenha){
tx="Conectando ao servidor...";
try {
ftp.connect( txUrl );
//verifica se conectou com sucesso!
if( FTPReply.isPositiveCompletion( ftp.getReplyCode() ) ) {
ftp.login( txUsuario , txSenha );
tx="Conectado...";
} else {
//erro ao se conectar
ftp.disconnect();
tx="Conexão recusada!";
System.exit(1);
}
} catch( Exception e ) {
tx= "Ocorreu um erro: "+e;
}
}
public void Disconecta(){
try {
ftp.logout();
ftp.disconnect();
} catch( Exception e ) {
JOptionPane.showMessageDialog(null,"Ocorreu um erro: "+e);
}
}
public void getPasta(String txPasta){
//informa a pasta
tx="Entrando na pasta...";
try {
boolean boo = ftp.changeWorkingDirectory(txPasta);
} catch( Exception e ) {
tx="Ocorreu um erro: "+e;
}
}
public void envia(String txArquivo,String nomeArquivo){
tx = "Enviando arquivo...";
try {
InputStream is = new FileInputStream( txArquivo );
//ajusta o tipo do arquivo a ser enviado
if( txArquivo.endsWith(".txt") ) {
ftp.setFileType( FTPClient.ASCII_FILE_TYPE );
} else if( txArquivo.endsWith(".jpg") ) {
ftp.setFileType( FTPClient.BINARY_FILE_TYPE );
} else {
ftp.setFileType( FTPClient.ASCII_FILE_TYPE );
}
tx="Enviando arquivo "+nomeArquivo+"...)";
ftp.storeFile( nomeArquivo, is );
tx= "Arquivo "+nomeArquivo+" enviado com sucesso!";
} catch( Exception e ) {
tx = "Ocorreu um erro: "+e;
}
}
public void recebe(String ArquivoOrigem,String ArquivoDestino){
tx = "Recebendo arquivo...";
try {
ftp.setFileType( FTPClient.BINARY_FILE_TYPE );
OutputStream os = new FileOutputStream(ArquivoDestino);
ftp.retrieveFile(ArquivoOrigem, os);
tx = "Arquivo recebido com sucesso...";
} catch( Exception e ) {
System.out.println("Ocorreu um erro: "+e);
}
}
@Override
public void run() {
System.out.println(tx);
}
}
public class teste {
public static void main(String args[]) {
funcoesFTP ftp = new funcoesFTP();
String txOrigem ="teste.pdf";
String txDestino = "c:\\Documentos\\teste.pdf";
ftp.start();
ftp.Conecta("ftp.endereco", "usuario", "senha1234");
ftp.getPasta("pdf");
ftp.recebe( txOrigem , txDestino );
ftp.Disconecta();
}
}
Tenho dificuldades de modelar classe, estou procurando entender.