Aprende a obtener el progreso de una descarga/subida de un archivo con JSCH en Java

Cómo mostrar el progreso de una descarga y subida de un archivo con JSCH (SFTP) en Java

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 !


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores