Fala pessoal,
Estou iniciando uma implementação usando a bliblioteca commons da apache para que minha aplicação envie e receba arquivos de um server FTP.
Estou utilizando os métodos storeFile e appendFile da classe FTPClient para enviar/resumir os arquivos, e, adaptando uns exemplos que peguei na net, funcionou tudo tranquilo… O problema eh que preciso monitorar como está a transferência, e mostrar ao usuário uma ProgressBar de quanto falta para a tarefa ser concluída.
Alguém já teve que fazer algo parecido com isso? deve existir algum jeito simples de pegar pelo menos o número de bytes transferidos, mas não encontrei um jeito que não seja POG!!! Qqr ajuda será bem vinda 
[]'s
Em vez de usar storeFile, use storeFileStream. É claro que dessa forma você tem de controlar o que ocorre, mas esse é o preço que você paga por ter mais controle.
Vlw thingol!
Consegui pegar os bytes transferidos usando esse método!
Pra quem precisa de algo parecido, ai vai o código dos métodos de teste que fiz.
private FTPClient ftp = new FTPClient();
private FileChannel in;
//verifica se o arquivo a ser transferido já existe no servidor
public boolean appendArquivo(File arquivo) throws IOException
{
//o arquivo já existe?
boolean existe = false;
//qnts bytes foram transferidos?
long bytesTransferidos = 0;
//iniciando o FileChannel para poder posicionar channel no byte certo, caso o arquivo exista
in = new RandomAccessFile(arquivo, "r").getChannel();
//pegando informações dos arquivos do diretório atual do ftp
FTPFile[] ftpFiles = ftp.initiateListParsing().getFiles();
for(int i=0; i<ftpFiles.length;i++)
{
if (ftpFiles[i].getName().equalsIgnoreCase(arquivo.getName()))
{
existe = true;
bytesTransferidos = ftpFiles[i].getSize();
}
}
//caso o arquivo já exista, posicione o FileChannel no byte apropriado
if(existe)
in.position(bytesTransferidos);
return existe;
}
//transfere o arquivo
public void transferir(final File arquivo, final boolean append)
{
new Thread()
{
public void run()
{
final WritableByteChannel out;
try
{
//setando o tipo de arquivo a ser transferido
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
//se o arquivo existe, usamos o método appendFileStream,
//caso contrário, usamos o storeFileStream
if(append)
out = Channels.newChannel(ftp.appendFileStream(arquivo.getName()));
else
out = Channels.newChannel(ftp.storeFileStream(arquivo.getName()));
ByteBuffer bb = ByteBuffer.allocateDirect(16384);
bb.clear();
while(in.read(bb) != -1)
{
bb.flip();
out.write(bb);
bb.clear();
//aqui só estou imprimindo em que byte que a transferência está.
//tendo o numero de bytes do arquivo e os bytes transferidos fica fácil
//de fazer o progressbar.
System.out.println(in.position());
}
in.close();
out.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}.start();
}
Se esse código foi útil pra alguém, let me know 
[puxa-saco]
E obrigado novamente thingol, como sempre enquanto estou indo com a farinha vc já tá voltando com o bolo 
[/puxa-saco]
[]'s
Javazilla:
Sei que faz tempo que você postou este código, mas quem sabe você ainda se lembra.
Sabe me dizer que número mágico é esse (16384) que aparece na linha 57 do teu código?