Travailler avec les fichiers Zip et GZip en Java
Il a été un moment depuis que j'ai fait en Java I/O, et je ne suis pas au courant de la dernière "droit" des façons de travailler avec Zip et GZip fichiers. Je n'ai pas forcément besoin d'un travail plein de démo - je suis principalement à la recherche pour le droit des interfaces et les méthodes à utiliser. Oui, je pourrais regarder tout aléatoire de ce tutoriel, mais la performance est un problème (ces fichiers peuvent être assez gros) et je ne se soucient en utilisant le meilleur outil pour le travail.
Le processus de base, je vais être mise en œuvre:
- Télécharger un tas de fichiers (qui peut être compressé, au format gzip, ou les deux) dans un dossier temp.
- Ajouter tous les fichiers extraits dans un nouveau fichier zip dans un dossier temp.
Les fichiers d'entrée peut être comprimé et archivé plus d'une fois. Par exemple, le "extraction" doit prendre l'une des entrées ci-dessous (je ne suis pas dans le contrôle de ceux-ci), et de laisser derrière foo.txt
:
foo.txt.gz
foo.txt.zip
foo.txt.gz.zip
foo.txt.zip.gz
- ...
foo.txt.gz.gz.gz.zip.gz.zip.zip.gz.gz
- ...
Alors, j'ai peut-être laissé avec foo.txt
bar.mp3
baz.exe
- donc, je voudrais juste ajouter un nouveau fichier zip avec des nom générique.
Questions:
- Avec la taille du fichier étant une source potentielle de préoccupation, qui (interfaces/classes/méthodes) dois-je utiliser pour rapidement:
- extraire des fichiers zip?
- extraire les fichiers gzip?
- écrire des fichiers zip?
- Suis-je mieux fait de garder l'individu extrait les fichiers dans la mémoire avant d'écrire sur le disque? Ou,
- Faire potentiellement de gros fichiers d'en faire une mauvaise idée?
source d'informationauteur Matt Ball
Vous devez vous connecter pour publier un commentaire.
Noter que TrueZip, la bibliothèque est proposée ci-dessous, a été remplacé par TrueVFS.
J'ai trouvé la TrueZIP bibliothèque utile. Il vous permet de traiter les fichiers d'archive comme si ils sont juste un autre système de fichiers et utiliser le familier Java I/O Api.
Contrairement à l'java.util.zip API, TrueZIP offre d'accès aléatoire pour le contenu de l'archive, de sorte que la taille du fichier ne doit pas être un sujet de préoccupation. Si je me souviens bien, il permet de détecter les fichiers d'archive et de ne pas essayer d'assurer la redondance de les compresser lorsque vous les mettez dans une archive.
Citant le TrueZIP page:
Ne tiennent pas toutes cette non compressé les données dans la mémoire, ou vous pourriez manquer de mémoire dans l'espace. Vous avez besoin de transmettre les données à un fichier lors de la décompression, puis le flux à partir d'un fichier lorsque vous souhaitez créer votre dernier fichier zip.
Je n'ai pas fait les fichiers zippés avant, mais voici un exemple qui montre comment décompresser un gzippé fichier:
Il peut y avoir une bibliothèque quelque part pour rendre cet facile.
Cependant, si il n'y en a pas, vous pouvez toujours le faire à la dure avec la java.util.zip les classes... à l'aide de
ZipFile
ouZipInputStream
avecZipEntry
pour zip.GZIPInputStream
peut emballer unFileInputStream
pour gzip, en gardant à l'esprit que gzip ne fonctionne que sur un seul type de fichiers.Les deux types de InputStreams aussi ont leurs OutputStreams.
Malheureusement, bien que je sais de ces classes, je n'ai jamais réellement utilisé eux, donc je ne peux pas vous conseiller plus que ça.
Edit: Le Zip fonctions ne semblent pas avoir n'importe quelle méthode pour ajouter de nouveaux fichiers dans un fichier zip, sans recréer de la chose entière.