2011-05-03 13 views
8

Tengo una clase simple de FTPClient que descarga archivos desde un servidor FTP. También necesito monitorear el progreso de la descarga, pero no veo la manera de hacerlo. La función descargando archivos es una simple función deSupervisión del progreso utilizando Apache Commons FTPClient

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

¿Cómo puedo controlar el progreso de la descarga?

Gracias, Anon.

+0

Necesita el equivalente de su función "hash" - no sé qué es. – duffymo

+0

Leí algo sobre un copyStreamAdapter, pero no conozco ningún detalle al respecto. –

Respuesta

18

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.

+1

¿Podría ver un ejemplo? –

Cuestiones relacionadas