Je crée un programme qui va extraire un zip puis insérez les fichiers dans une base de données, chaque si souvent je reçois l'erreurzip extrait java fin inattendue du flux d'entrée ZLIB
java.lang.Exception: java.io.EOFException: Unexpected end of ZLIB input stream
Je ne peux pas préciser la raison pour cela que le code d'extraction est à peu près le même que tous les autres codes que vous pouvez trouver sur le web. Mon code est le suivant:
public void extract(String zipName, InputStream content) throws Exception {
int BUFFER = 2048;
//create the zipinputstream
ZipInputStream zis = new ZipInputStream(content);
//Get the name of the zip
String containerName = zipName;
//container for the zip entry
ZipEntry entry;
// Process each entry
while ((entry = zis.getNextEntry()) != null) {
//get the entry file name
String currentEntry = entry.getName();
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// establish buffer for writing file
byte data[] = new byte[BUFFER];
int currentByte;
// read and write until last byte is encountered
while ((currentByte = zis.read(data, 0, BUFFER)) != -1) {
baos.write(data, 0, currentByte);
}
baos.flush(); //flush the buffer
//this method inserts the file into the database
insertZipEntry(baos.toByteArray());
baos.close();
}
catch (Exception e) {
System.out.println("ERROR WITHIN ZIP " + containerName);
}
}
}
• Avez-vous vérifié que le flux ZIP (fichier) que vous essayez de traiter est valide (par exemple, «unzip» peut le décompresser)? • Veuillez localiser la ligne dans le code qui a réellement déclenché l'exception. –
Je ne me souviens pas correctement, mais n'êtes-vous pas censé fermer chaque entrée après l'avoir traitée? – biziclop
Vous devriez fermer le baos avant d'appeler insertZipEntry(), et notre variable 'currentByte' est mal nommée: devrait être 'count' ou similaire. – EJP