2011-05-03 25 views
8

Dosyaları FTP sunucusundan yükleyen basit bir FTPClient sınıfına sahibim. Ayrıca, indirme işleminin ilerlemesini izlemem gerekiyor, ama nasıl bir yol göremiyorum. Aslında indirdiğiniz dosyalar fonksiyonu ben indirme durumunu nasıl Apache Commons kullanarak ilerleme izleme FTPClient

(your ftp client name).retrieveFile(arg1,arg2);

basit fonksiyonudur?

Teşekkürler, Anon.

+0

"Karma" işlevinin eşdeğerine ihtiyacınız var - ne olduğunu bilmiyorum. – duffymo

+0

Bir copyStreamAdapter hakkında bir şey okudum, ancak bu konuda herhangi bir ayrıntı bilmiyorum. –

cevap

18

Bir CountingOutputStream'e ihtiyacınız var (Commons IO'da görüldüğü gibi: http://commons.apache.org/io/api-release/index.html). Sen ..

EDIT, onlardan biri oluşturmak İçinde Hedef OutputStream sarın ve sonra indirme ilerlemesini izlemek talep üzerine ByteCount kontrol edebilirsiniz:

int size; 
String remote, local; 

// do some work to initialize size, remote and local file path 
// before saving remoteSource to local 
OutputStream output = new FileOutputStream(local); 
CountingOutputStream cos = new CountingOutputStream(output){ 
    protected void beforeWrite(int n){ 
     super.beforeWrite(n); 

     System.err.println("Downloaded "+getCount() + "/" + size); 
    } 
}; 
ftp.retrieveFile(remote, cos); 

output.close(); 

: Böyle bir şey yapacağını Programınız çok iş parçacıklıysa, ilerlemeyi ayrı bir iş parçacığı kullanarak izlemek isteyebilirsiniz (örneğin, bir GUI programı için), ancak bu uygulamalara özgü bir ayrıntıdır.

+1

Bir örnek görebilir miyim? –