Fermeture de ZipOutputStream
Je suis un peu confus. Je sais qu'un vide zip n'est pas légal. Mais à propos de cet extrait d'exemple:
ZipOutputStream zos = null;
try
{
zos = new ZipOutputStream(new FileOutputStream("..."));
//
//..
//
}
finally
{
zos.close();
}
Si pas de zip entrées avaient été ajoutés pour une raison quelconque (éventuellement situation exceptionnelle) ensuite, l'exception sera levée sur près tentative:
Exception in thread "main" java.util.zip.ZipException: ZIP file must have at least one entry
at java.util.zip.ZipOutputStream.finish(ZipOutputStream.java:304)
at java.util.zip.DeflaterOutputStream.close(DeflaterOutputStream.java:146)
at java.util.zip.ZipOutputStream.close(ZipOutputStream.java:321)
Dans cette situation, quelle serait la façon la plus propre de fermer le flux de données?
Merci...
source d'informationauteur Lachezar Balev
Vous devez vous connecter pour publier un commentaire.
Vous devez fermer le
FileOutputStream
pas laZipOutputStream
parce que l'ancien est réellement ce qui consomme des ressources système.La
IOUtils
classe est trouvé dans Jakarta Commons IO. L'utiliser signifie que vous n'avez pas à traiter avec le possible-mais rarement-utileIOException
qui peuvent être levées parclose()
.Vous devez suivre si vous avez ajouté des trucs dans le zip de flux et de le fermer que lorsque les choses ont été ajoutées:
de si vous n'avez pas besoin de les compter il suffit d'utiliser un
boolean
drapeau.Au lieu de fermer le flux que lorsque les choses sont ajoutés, ce que j'ai fait est une condition de vérifier pour voir si il n'y avait rien à zip, avant d'exécuter le code postal. Cela m'a aidé à simplifier le processus et je pense peut être utilisé en général pour gérer le "fichier ZIP doit avoir au moins une entrée" problème. Vrai que la fermeture
zos
peut lancer d'autres exceptions, mais c'est rare.Je pense que c'est le problème avec Java, qui ne gère pas le cas quand il n'y a pas des fichiers zip.
je.e: