En este ejemplo veremos como descargar un archivo y en una barra de progreso ver el estado de la descarga. Comencemos por la interfaz:

Ahora crearemos la clase que se encargará de descargar el archivo y animar la barra de progreso.
      package modelo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.logging.Level;
import java.util.logging.Logger;
import vista.principal;

/**
 *
 * @author pablo
 */
public class hiloDescargar implements Runnable{

    principal p;
    String ar;
    
    public hiloDescargar(principal p, String ar){
        this.p = p;
        this.ar = ar;
    }
    
    @Override
    public void run() {
        try {
            //Creamos una URL usando el String recibido del campo de texto
            URL url = new URL(ar);
            URLConnection urlCon = url.openConnection();
            //Creamos un archivo para la descarga igual que el archivo remoto
            File file2 = new File(url.toString());
            File file = new File(file2.getName());
            //Abrimos streamers y creamos un array de bytes para ir almacenando hay
            //los datos de descarga y enviarlos al archivo
            try (FileOutputStream fos = new FileOutputStream(file)) {
                InputStream is = urlCon.getInputStream();
                byte [] array = new byte[1000];
                int leido = is.read(array);
                //Aplicando valores a la barra de progreso
                int maximo = urlCon.getContentLength();
                    p.barra.setMinimum(0);
                    p.barra.setMaximum(maximo);
                    p.barra.setValue(0);
                    int actual = 0;
                    while (leido > 0) {
                        fos.write(array,0,leido);
                        leido=is.read(array);
                        p.barra.setValue(actual);
                        actual += leido;
                        p.barra.setString("Descargando "+actual+"/"+maximo+" bytes");
                    }
            fos.close();
                }
        } catch (MalformedURLException ex) {
            Logger.getLogger(hiloDescargar.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(hiloDescargar.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
Ahora tan solo nos queda crear un objeto hiloDescargar e introducirlo dentro de un hilo. Usaremos un ActionPerformed sobre el botón de descargar para ello.
     this.p.btnDescargar.setActionCommand("btnDescargar");
        this.p.btnDescargar.addActionListener((ActionEvent ae) -> {
            hiloDescargar h = new hiloDescargar(p, p.txtDireccion.getText());
            Thread t = new Thread(h);
            t.start();
        });
Con esto estaría terminada la aplicación.
Proyecto de netbeans : aquí.

0 Comments:

Post a Comment



Entrada más reciente Entrada antigua Inicio

Con la tecnología de Blogger.