Necesita un CountingOutputStream (como se ve en Commons IO: http://commons.apache.org/io/api-release/index.html). Se crea una de esas, envolver su destino OutputStream en ella, y luego se puede comprobar la ByteCount en la demanda para monitorear el progreso de la descarga ..
EDIT: Se podría hacer algo como esto:
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();
Si su programa es multiproceso, es posible que desee supervisar el progreso utilizando un hilo separado (por ejemplo, para un programa de GUI), pero ese es todo el detalle específico de la aplicación.
Necesita el equivalente de su función "hash" - no sé qué es. – duffymo
Leí algo sobre un copyStreamAdapter, pero no conozco ningún detalle al respecto. –