2011-05-03 26 views
8

Mam prostą klasę FTPClient, która pobiera pliki z serwera FTP. Muszę również monitorować postęp pobierania, ale nie widzę sposobu, w jaki sposób. Funkcja faktycznie pobierania plików jest prostą funkcjąMonitorowanie postępów za pomocą Apache Commons FTPClient

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

Jak mogę monitorować postęp pobierania?

Dzięki, Anon.

+0

Potrzebujesz odpowiednika funkcji "hash" - nie wiesz, co to jest. – duffymo

+0

Czytałem coś o copyStreamAdapter, ale nie znam żadnych szczegółów na ten temat. –

Odpowiedz

18

Potrzebujesz CountingOutputStream (jak widać na Commons IO: http://commons.apache.org/io/api-release/index.html). Utworzyć jedną z tych, owinąć docelowy OutputStream w nim, a następnie można sprawdzić ByteCount na żądanie w celu monitorowania postępu pobierania ..

EDIT: Można by zrobić coś takiego:

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(); 

Jeśli twój program jest wielowątkowy, możesz chcieć monitorować postęp przy użyciu osobnego wątku (na przykład dla programu GUI), ale to wszystko specyficzne dla aplikacji.

+1

Czy mogę zobaczyć przykład? –

Powiązane problemy