La tarea de crear un cliente SFTP en Java se volvio una tarea realmente sencilla gracias a la librería JSCH. JSch es una implementación del protocolo SSH2 en Java (que permite usar el canal SFTP). Esta librería te permite conectarte a un servidor sshd y usar redirección de puertos, redirección X11, transferencia de archivos, etc. además puedes integrar dichas funcionalidades a tus propios programas en Java. Esta librería se encuentra licenciada bajo la licencia BSD.
Puedes solamente mostrar el progreso de una descarga y una subida usando los métodos put and get, para ello simplemente crearemos una nueva clase que obtendrá el progreso de dichos procesos en el tercer parametro. Primero necesitaremos crear una clase que se encargará este problema por ti, esta clase es la siguiente:
package com.mipaqueteuwu.algo;
// Importante importar la clase SftpProgressMonitor
import com.jcraft.jsch.SftpProgressMonitor;
// Puedes cambiar el nombre de la clase si asi lo deseas
public class progressMonitor implements SftpProgressMonitor{
private long max = 0;
private long count = 0;
private long percent = 0;
private CallbackContext callbacks = null;
// Si necesitas hacer algo en el constructor, modifica el método
public progressMonitor() {}
public void init(int op, java.lang.String src, java.lang.String dest, long max) {
this.max = max;
System.out.println("Iniciando tarea");
// Origen
System.out.println(src);
// Destino
System.out.println(dest);
// Tamaño total del archivo
System.out.println(max);
}
public boolean count(long bytes){
this.count += bytes;
long percentNow = this.count*100/max;
if(percentNow>this.percent){
this.percent = percentNow;
// Progreso 0,0
System.out.println("Progreso: ",this.percent); // Progress 0,0
// Tamaño total del archivo
System.out.println(max);
// Progreso en bytes a partir del total
System.out.println(this.count);
}
return(true);
}
public void end(){
// El proceso finalizó
System.out.println("Finalizado");
// Progreso
System.out.println(this.percent);
// Tamaño total del archivo
System.out.println(max);
// Progreso en bytes a partir del total
System.out.println(this.count);
}
}
En dicha clase se realiza lo que tienes que hacer para mostrar el progreso, en nuestro caso simplemente mostramos el porcentaje en la consola. Para que se use la clase, debes proveer como tercer argumento de las funciones de subir y bajar archivos (put & get) una nueva instancia de la clase como tercer argumento:
// en subir archivo
sftp.put("myArchivoLocal.txt", "myNuevoArchivoRemoto.txt", new progressMonitor());
// en descargar
sftp.get("miArchivoRemoto.txt", "myNuevoArchivoLocal.txt", new progressMonitor());
Que te diviertas !
Conviertete en un programador más sociable