tenemos un código que genera un archivo zip en nuestro sistema. Todo está bien, pero a veces este archivo comprimido abierto por FilZip o WinZip se considera dañado.¿Cómo comprobar si un archivo zip generado está dañado?
Así que aquí está mi pregunta: ¿cómo podemos comprobar programáticamente si un archivo zip generado está dañado?
Este es el código que estamos utilizando para generar nuestros archivos zip:
try {
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(tmpFile));
byte[] buffer = new byte[16384];
int contador = -1;
for (DigitalFile digitalFile : document.getDigitalFiles().getContent()) {
ZipEntry entry = new ZipEntry(digitalFile.getName());
FileInputStream fis = new FileInputStream(digitalFile.getFile());
try {
zos.putNextEntry(entry);
while ((counter = fis.read(buffer)) != -1) {
zos.write(buffer, 0, counter);
}
fis.close();
zos.closeEntry();
} catch (IOException ex) {
throw new OurException("It was not possible to read this file " + arquivo.getId());
}
}
try {
zos.close();
} catch (IOException ex) {
throw new OurException("We couldn't close this stream", ex);
}
¿Hay algo que estamos haciendo mal aquí?
EDITAR: En realidad, el código anterior está absolutamente bien. Mi problema era que estaba redireccionando la transmisión INCORRECTA para mis usuarios. Entonces, en lugar de abrir un archivo zip, abrían algo completamente diferente. mea culpa :(
pero la cuestión principal sigue siendo: ¿cómo programáticamente puedo verificar si un archivo zip dado no está dañado
Solo un problema adicional: zos no se cerrará si se produce una excepción. ¿Podría pegar el resto del try/catch/finally externo? –