Decargar un archivo desde Java

Descarga un archivo de la web

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;
/**
 * @author leyer
 */
public class Download extends Thread{

	private URL    url      = null;
	private String location = null;
	
	private FileOutputStream fileOutputStream = null;
	private InputStream      inputStream      = null;
	
	static int len = 0;
	static int off = 0;
	
	public Download(final URL url,String location) {
		this.url      = url;
		this.location = location;
		try {
			URLConnection urlConnection = this.url.openConnection();
			inputStream = urlConnection.getInputStream();
			String p = url.getFile();
			String name = p.substring(p.lastIndexOf("/")+1, p.length());
			System.out.println("Nombre del archivo: "+name);
			fileOutputStream = new FileOutputStream(new File(this.location+name));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	static byte[] buffer = new byte[1024];
	
	public static void main(String[] args) {
	try {
		new Download(new URL("http://java.sun.com/docs/books/jls/download/langspec-3.0.pdf"), "/home/leyer/").start();
	} catch (MalformedURLException malformedURLException) {
		malformedURLException.printStackTrace();
		}
	}
	@Override
	public void run() {
		try {
			System.out.println("Descargando...");
			while((len=inputStream.read(buffer))>=0){
				fileOutputStream.write(buffer, off, len);
				fileOutputStream.flush();
			}
			System.out.println("Descarga completada: "+location+this);
		} catch (IOException ioException) {
			ioException.printStackTrace();
		}finally{
			try {
				fileOutputStream.close();
			} catch (IOException ioException2) {
				ioException2.printStackTrace();
			}
		}
	}
}
Anuncios

6 comentarios to “Decargar un archivo desde Java”

  1. Nunca consegui monitorizar el procentaje de descarga de un archivo grande, por ejemplo una ISO de 4gb, para conseguir el tamaño, lo devolvia en int y era un valor demasiado grande.

    • El error es Exception in thread “main” java.lang.OutOfMemoryError: Java heap space

      no es posible hacer algo asi new byte[urlConnection.getContentLength()]; ya que el buffer de lectura seria demasiado y da origen a la excepción de memoria

  2. Buenas Jleyex,
    disculpa me puedes ayudar estoy utilizando tu codigo pero no me permite bajarlo,el archivo se encuentra accesible desde el navegador,podrias darme una pista por favor.

    package asar.analitics;

    import java.io.DataOutputStream;
    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;
    /**
    * @author leyer
    */
    public class Download extends Thread{

    private URL url = null;
    private String location = null;

    private FileOutputStream fileOutputStream = null;
    private InputStream inputStream = null;

    static int len = 0;
    static int off = 0;

    public Download(final URL url,String location) {
    this.url = url;
    this.location = location;
    try {
    URLConnection connection = this.url.openConnection();
    connection.setDoInput(true);
    connection.setDoOutput(true);
    connection.setUseCaches(false);
    connection.setRequestProperty(“Content-type”,”application/octet-stream”);
    DataOutputStream outStream=new DataOutputStream(connection.getOutputStream());
    InputStream stream = (new java.net.URL(“http://blackrock.com/mx/literature/pcf/pcf-naftrac-en_mx.xls”)).openStream();
    System.out.println(stream.toString());
    inputStream = connection.getInputStream();
    String p = url.getFile();
    String name = p.substring(p.lastIndexOf(“/”)+1, p.length());
    System.out.println(“Nombre del archivo: “+name);
    fileOutputStream = new FileOutputStream(new File(this.location+name));
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    static byte[] buffer = new byte[1024];

    public static void main(String[] args) {
    try {
    new Download(new URL(“http://blackrock.com/mx/literature/pcf/pcf-naftrac-en_mx.xls”), “//Acwapuai01/APLICATIVO/TVE”).start();
    } catch (MalformedURLException malformedURLException) {
    malformedURLException.printStackTrace();
    }
    }
    @Override
    public void run() {
    try {
    System.out.println(“Descargando…”);
    while((len=inputStream.read(buffer))>=0){
    fileOutputStream.write(buffer, off, len);
    fileOutputStream.flush();
    }
    System.out.println(“Descarga completada: “+location+this);
    } catch (IOException ioException) {
    ioException.printStackTrace();
    }finally{
    try {
    fileOutputStream.close();
    } catch (IOException ioException2) {
    ioException2.printStackTrace();
    }
    }
    }
    }

  3. Leyer tengo un problema en la linea inputStream = urlConnection.getInputStream();
    me manda el mensaje de java.net.ConnectException: Connection refused: connect,podrias darme una pista el porque?

    gracias!
    Saludos!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: