Java - Problema al descargar fichero

 
Vista:

Problema al descargar fichero

Publicado por Neoniet (1 intervención) el 16/09/2006 16:06:08
buenas.

Tengo un problemillas, estoy probando java y estoy haciendo un simple programita que se baja un archivo binario desde un servidor web, el problema que es que lo baja corrupto, vamos que no entiendo lo baja con bytes de más. Y no se el motivo, os pongo el codigo a ver si me podeis echar una mano:

import java.io.*;
import java.net.*;
import java.lang.*;

public class DescargarUrl{

URL url;
URLConnection servidor;
InputStream conexion;
BufferedInputStream archivo_remoto;
FileOutputStream archivo_local;
BufferedOutputStream escritor;
int descargado;
int peso;

DescargarUrl(String url_archivo){
try{
url = new URL(url_archivo);
servidor = url.openConnection();
conexion = servidor.getInputStream();
peso = servidor.getContentLength();
archivo_remoto = new BufferedInputStream(conexion);
System.out.println("Iniciando descarga de " + peso + " bytes");
}catch(Exception e){
}
}

public void inicioDescarga(String destino){
try{
archivo_local= new FileOutputStream(destino);
escritor = new BufferedOutputStream(archivo_local);
}catch(IOException e){
}
}

public boolean descargarBytes()
{
int bytes_disponibles;

try{
byte[] datos = new byte[1024];
if((bytes_disponibles = archivo_remoto.read(datos)) == -1)
{
escritor.write(datos);
System.out.println("Fin de flujo");
escritor.close();
return false;
}
else
{ descargado += bytes_disponibles;
escritor.write(datos);
return true;
}
}
catch(IOException e)
{
}
return true;
}

public static void main(String args[])
{
DescargarUrl mul = new DescargarUrl("http://www.crilandor.com/archivos/hues.mul");
mul.inicioDescarga("hues.mul");
while(mul.descargarBytes())
{
System.out.println(mul.descargado + "bytes");
}
}

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema al descargar fichero

Publicado por Chucky (3 intervenciones) el 17/09/2006 15:58:36
byte[] datos = new byte[1024];
if((bytes_disponibles = archivo_remoto.read(datos)) == -1)
{
escritor.write(datos);
System.out.println("Fin de flujo");
escritor.close();
return false;
}
else
{ descargado += bytes_disponibles;
escritor.write(datos);
return true;
}

cuando archivo_remoto.read(datos) te devuelve -1 es que no hay más datos, pero a pesar de ello repites escritor.write(datos); que hace que el ultimo array de bytes lo vuelva a repetir.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar