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.
Potrzebujesz odpowiednika funkcji "hash" - nie wiesz, co to jest. – duffymo
Czytałem coś o copyStreamAdapter, ale nie znam żadnych szczegółów na ten temat. –