J'ai regardé la bibliothèque Zip par défaut fournie avec le JDK et les bibliothèques de compression Apache et je ne suis pas satisfait d'eux pour 3 raisons:
Ils sont gonflés et ont une mauvaise conception de l'API. Je dois écrire 50 lignes de sortie de tableau d'octets de plaque de chaudière, entrée zip, fichiers de sortie et fermer les flux pertinents et intercepter les exceptions et déplacer les tampons d'octets par moi-même ? Pourquoi ne puis-je pas avoir une API simple qui ressemble à ceci
Zipper.unzip(InputStream zipFile, File targetDirectory, String password = null)
etZipper.zip(File targetDirectory, String password = null)
qui fonctionne?Il semble que la décompression de la décompression détruit les métadonnées du fichier et que la gestion des mots de passe est rompue.
De plus, toutes les bibliothèques que j'ai essayées étaient 2-3x plus lentes que les outils zip de ligne de commande que j'obtiens avec UNIX?
Pour moi (2) et (3) sont des points mineurs mais je veux vraiment une bonne bibliothèque testée avec une interface à une ligne.
la source
Réponses:
Je sais que c'est tard et il y a beaucoup de réponses, mais ce zip4j est l'une des meilleures bibliothèques de zip que j'ai utilisées. Son simple (pas de code de chaudière) et peut facilement gérer les fichiers protégés par mot de passe.
La dépendance Maven est:
la source
Avec Apache Commons-IO ,
IOUtils
vous pouvez faire ceci:C'est encore du code standard, mais il n'a qu'une seule dépendance non exotique: Commons-IO
la source
close()
cela ne fera pas de mal.Extraire le fichier zip et tous ses sous-dossiers, en utilisant uniquement le JDK:
Fichiers Zip et tous ses sous-dossiers:
la source
extractFolder(String zipFile,String extractFolder)
Une autre option que vous pouvez consulter est zt-zip disponible à partir de la page centrale et du projet Maven à https://github.com/zeroturnaround/zt-zip
Il a la fonctionnalité standard de compression et de décompression (sur les flux et sur le système de fichiers) + de nombreuses méthodes d'assistance pour tester les fichiers dans une archive ou ajouter / supprimer des entrées.
la source
Mise en œuvre complète pour compresser / décompresser un dossier / fichier avec zip4j
Téléchargez le pot à partir d' ici et ajoutez-le à votre chemin de génération de projet. Le
class
soufflet peut compresser et extraire n'importe quel fichier ou dossier, avec ou sans protection par mot de passe-la source
Un très beau projet est TrueZip .
Par exemple (sur le site Web ):
la source
Une autre option est JZlib . D'après mon expérience, il est moins "centré sur les fichiers" que zip4J, donc si vous devez travailler sur des objets blob en mémoire plutôt que sur des fichiers, vous voudrez peut-être y jeter un œil.
la source
Il y a un exemple complet ici pour compresser et décompresser des fichiers de manière récursive: http://developer-tips.hubpages.com/hub/Zipping-and-Unzipping-Nested-Directories-in-Java-using-Apache-Commons-Compress
la source
Avez-vous consulté http://commons.apache.org/vfs/ ? Il prétend simplifier beaucoup de choses pour vous. Mais je ne l'ai jamais utilisé dans un projet.
Je ne connais pas non plus les bibliothèques de compression Java-Native autres que JDK ou Apache Compression.
Je me souviens une fois que nous avons extrait certaines fonctionnalités d'Apache Ant - elles contiennent de nombreux utilitaires de compression / décompression.
Un exemple de code avec VFS ressemblerait à ceci:
la source