Java Zone DownLoader

Java Zone DownLoader

Crea tu propio manejador de descargas, si sabes manejar Java solo tienes que descargar el codigo y modificarlo a tu gusto, imaginacion es lo unico que necesitas.

Y si no sabes Java no importa descargalo y pruebalo.

Imagenes

Descargalo

Descarga el proyecto en el siguiente enlace Java Zone DownLoader

Clase Principal

package Clases;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.*;

public class Principal extends JFrame {
 
 JButton btnagregar;
 JPanel panelPrincipal;
 int indice=0;
 
 public Principal(){
 
  colocarSkin();
 
  panelPrincipal=new JPanel();
  panelPrincipal.setLayout(new GridLayout(11,1,0,10));
 
  JPanel pbotones=new JPanel();
  btnagregar=new JButton("Agregar Descarga");
  btnagregar.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    if(indice<10){
     PanelDescarga pd=new PanelDescarga(Principal.this);
     pd.setBorder(BorderFactory.createRaisedBevelBorder());
     panelPrincipal.add(pd);
     panelPrincipal.updateUI();
     repaint();
     indice++;
    }else{
     JOptionPane.showMessageDialog(null, "Maximo se permiten 10 descargas simultaneas.");
    }
   }
   
  });
  pbotones.add(btnagregar);
  panelPrincipal.add(pbotones);
 
  add(panelPrincipal);
 }
 
 public void colocarSkin(){
  try {
   UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
   } catch (ClassNotFoundException e) {
    e.printStackTrace();
   } <catch (InstantiationException e) {
    e.printStackTrace();
   } catch (IllegalAccessException e) {
    e.printStackTrace();
   } catch (UnsupportedLookAndFeelException e) {
    e.printStackTrace();
   }
 }
 
 public static void main(String[] args) {
  Principal p=new Principal();
  p.setVisible(true);
  p.setBounds(0, 0, 600, 650);
  p.setDefaultCloseOperation(EXIT_ON_CLOSE);
  p.setLocationRelativeTo(null);
 }
}

Clase PanelDescarga

package Clases;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import javax.swing.*;

public class PanelDescarga extends JPanel {
 
 JPanel pdigitar,pbajando;
 JTextField txturl;
 JButton btncomenzar,btncancelar;
 JProgressBar progreso;
 JLabel lnombrearchivo;
 Principal p;
 Descargar d;
 int sw=0;
 
 public PanelDescarga(Principal prin){
 
  p=prin;
 
  pdigitar=new JPanel();
  pbajando=new JPanel();
 
  pdigitar.add(new JLabel("URL: "));
  txturl=new JTextField(35);
  txturl.setText("http://");
  pdigitar.add(txturl);
  btncomenzar=new JButton("Comenzar");
  btncomenzar.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    removeAll();
    add(pbajando);
    d=new Descargar(txturl.getText(),PanelDescarga.this);
    d.estado=d.DESCARGANDO;
    d.start();
    repaint();
   }
   
  });
  pdigitar.add(btncomenzar);
  add(pdigitar);
 
  lnombrearchivo=new JLabel();
  pbajando.add(lnombrearchivo);
  progreso=new JProgressBar(0,100);
  progreso.setStringPainted(true);
  pbajando.add(progreso);
 
  btncancelar=new JButton("Cancelar");
  btncancelar.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    if(sw==0){
     d.estado=d.CANCELADO;
     sw=1;
    }else{
     Desktop escritorio=Desktop.getDesktop();
     if(escritorio.isDesktopSupported()){
      try {
       File f=new File(d.nombreArchivo);
       escritorio.open(f);
      } catch (IOException e1) {
       // TODO Auto-generated catch block
       e1.printStackTrace();
      }
     }
    }
   }
   
  });
  pbajando.add(btncancelar);
 }
}

Clase Descarga

package Clases;

import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.JOptionPane;

public class Descargar extends Thread {
 
 public final int DESCARGANDO = 0;
    public final int COMPLETADO = 1;
    public final int CANCELADO = 2;
    public final int ERROR = 3;
   
    URL url;
    int tamañoarchivo=-1;
    int datosdescargado;
    int estado;
    PanelDescarga pd;
    RandomAccessFile file = null;
    String nombreArchivo="";
 
 public Descargar(String u, PanelDescarga paneld){
  try {
   url=new URL(u);
   pd=paneld;
   nombreArchivo=url.getFile().substring(url.getFile().lastIndexOf('/') + 1);
   pd.lnombrearchivo.setText(nombreArchivo);
  } catch (MalformedURLException e) {
   pd.progreso.setString("ERROR");
  }
 }
 
 public void run(){
        InputStream stream = null;
       
        try {
            HttpURLConnection connection =
                    (HttpURLConnection) url.openConnection();
           
            connection.setRequestProperty("Range",
                    "bytes=" + datosdescargado + "-");
           
            connection.connect();
           
            if (connection.getResponseCode() / 100 != 2) {
             pd.progreso.setString("ERROR");
            }
           
            int contentLength = connection.getContentLength();
            if (contentLength < 1) {
             pd.progreso.setString("ERROR");
            }
           
            if (tamañoarchivo == -1) {
                tamañoarchivo = contentLength;
            }
           
            file = new RandomAccessFile(nombreArchivo, "rw");
            file.seek(datosdescargado);
           
            stream = connection.getInputStream();
            while (estado == DESCARGANDO) {

                byte buffer[];
                if (tamañoarchivo - datosdescargado > 1024) {
                    buffer = new byte[1024];
                } else {
                    buffer = new byte[tamañoarchivo - datosdescargado];
                }
               
                int read = stream.read(buffer);
                if (read == -1)
                    break;
               
                file.write(buffer, 0, read);
                datosdescargado += read;
                pd.progreso.setValue(getProgreso());
               
            }
           
            if (estado == DESCARGANDO) {
                estado = COMPLETADO;
                pd.progreso.setString("COMPLETADO");
                pd.sw=1;
                pd.btncancelar.setText("Abrir");
            }
            if(estado==CANCELADO){
             pd.progreso.setString("CANCELADO");
            }
        } catch (Exception e) {
            pd.progreso.setString("ERROR");
        } finally {
            if (file != null) {
                try {
                    file.close();
                } catch (Exception e) {
                 pd.progreso.setString("ERROR");
                }
            }
           
            if (stream != null) {
                try {
                    stream.close();
                } catch (Exception e) {
                 pd.progreso.setString("ERROR");
                }
            }
        }
 }
 
 public int getProgreso() {
  float progreso=((float)datosdescargado/tamañoarchivo)*100;
  int aux=(int)progreso;
        return aux;
    }
}

Visitanos en Java Zone para ver la explicacion del codigo