java extraire zip fin Inattendue de ZLIB flux d'entrée
Je suis entrain de créer un programme qui va extraire un zip et ensuite insérer les fichiers dans une base de données, chaque tellement souvent, je reçois le message d'erreur
java.lang.Exception: java.io.EOFException: Unexpected end of ZLIB input stream
Je ne peux pas identifier la raison de ce que l'extraction de code est à peu près la même chose que tous les autres codes que vous pouvez trouver sur le web. Mon code est comme suit:
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 ZIP flux (fichier) vous essayez de traiter est valide (par exemple,
Je ne peut pas se rappeler correctement mais n'êtes-vous pas censé fermer chaque entrée après le traitement?
Vous devez fermer le baos avant d'appeler insertZipEntry(), et notre "currentByte variable est mal nommée: "comte" ou similaire.
Pouvez-vous choisir une meilleure réponse à votre question?
unzip
pouvez le décompresser)? • Veuillez repérer la ligne de code qui fait a soulevé l'exception.Je ne peut pas se rappeler correctement mais n'êtes-vous pas censé fermer chaque entrée après le traitement?
Vous devez fermer le baos avant d'appeler insertZipEntry(), et notre "currentByte variable est mal nommée: "comte" ou similaire.
Pouvez-vous choisir une meilleure réponse à votre question?
OriginalL'auteur medium | 2011-11-10
Vous devez vous connecter pour publier un commentaire.
Ceci est probablement causé par cette JVM bug (JVM-6519463)
J'ai déjà a environ une ou deux erreurs de 1000 créés de manière aléatoire documents, j'ai appliqué la solution proposée (capture EOFException et ne rien faire avec elle) et je n'ai plus d'erreurs.
OriginalL'auteur Stephan L
Je dirais que vous êtes de temps en temps étant donné tronquée Zip fichiers à traiter. Vérifier en amont.
OriginalL'auteur user207421
N'essayez jamais de lire des octets de plus que l'entrée contient. Appel ZipEntry.getSize() pour obtenir la taille réelle de l'entrée, puis utiliser cette valeur pour comptabiliser le nombre d'octets restant dans l'entrée pendant la lecture. Voir ci-dessous :
EJP: et pourtant, il échoue. Cependant, à la fois l'entrée.getSize() et de l'entrée.getCompressedSize() renvoie -1 pour moi.
OriginalL'auteur Drona