Foro sobre Java SE > Trabajar con un zip
Sin ver el código que estás usando, y las líneas concretas donde se lanza esa excepción, creo que comprenderás que, aparte de "adivinar", poco más se puede hacer.
Sospecho que estás haciendo un typecast de manera errónea, en la creencia de que si una clase hereda otra, cualquier typecast es válido.
try {
File file = new File(nOD.conectaSinProxy(ConstantesInforme.HOST_EAGORA, uri, 10));
FileInputStream fis = new FileInputStream(file);
ZipInputStream zis = new ZipInputStream(fis);
ZipEntry entrada;
try {
while (null != (entrada = zis.getNextEntry())) {
System.out.println(entrada.getName());
FileOutputStream fos = new FileOutputStream(
entrada.getName());
int leido;
byte[] buffer = new byte[1024];
while (0 < (leido = zis.read(buffer))) {
fos.write(buffer, 0, leido);
}
fos.close();
zis.closeEntry();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
nOD es la clase navegadora que usamos siempre para navegar. Normalmente lo que suelo tratar es el contenido Html de la url que atacamos, para leer celdas de tablas tipo estadillos. O sea datos que luego seteamos en tablas excel para crear informes.
El caso es que como esta uri lo que te da es un archivo zip, estoy estancado sin saber muy bien como tratar esta llegada de datos, para poder tratarla. El codigo que te he puesto funciona correctamente si le pasas un archivo zip desde local. Recorre el zip (en mi caso solo tiene un archivo xls dentro) y setea su nombre su nombre por consola.
Vale......y perdon por el mensaje anterior. No probe y mi problema es que el archivo me lo estoy trayendo mal. Lo guardo en local asi:
File file = new File("c:/eli/fichero.zip");
FileWriter fw = new FileWriter(file);
fw.write(nOD.conectaSinProxy(ConstantesInforme.HOST_EAGORA, uri, 10));
fw.flush();
fw.close();
El problema es que no lo guarda correctamente y me dice que el archivo esta dañado (el xls). Supongo que estoy fallando en el metodo de descarga. ¿Abra que descargarlo byte a byte o algo parecido?
Por lo que expones, da la impresión de que el método de descarga desde la url tiene alguna clase de problema.
Lo habitual es abrir la url y obtener el archivo mediante el método openStream de la clase URL:
http://docs.oracle.com/javase/7/docs/api/java/net/URL.html#openStream()
Buenos dias. Tengo que trabajar con un fichero xls, el cual tengo que descargar previamente de una url concreta. Al invocar la descarga desde explore por ejemplo, recibo un mensaje que me invita a "abrir" o "guardar" el zip en local. Si invoco desde java-eclipse y lo paso por consola para ver que recibo, recibo un flujo String que empieza por "PK", con lo cual por lo que he leido por ahi, estoy trayendome correctamente el archivo zip que contiene mi xls a tratar. Hasta aqui no he tenido muchas pegas, pero ahora no se muy bien como abordar el siguiente paso, que seria volcar este flujo de datos de manera que pueda trabajar con el. La finalidad es poder trabajar como hago con otros xls (leo el libro, leo la hoja, leo la fila, leo la celda, etc...). ¿Me podrian indicar como debo abordar el tema? ¿algun enlace que hable de ello o me pueda orientar algo mas?. Me he dado de bruces con la incongruencia de que aunque ByteArrayOutputStream hereda de OutputStream, no puedo trabajar con el a nivel OutputStream. Me tira error de tipo "Type mismatch: cannot convert from OutputStream". Gracias.