Renommer un Fichier/Dossier à l'intérieur d'un Fichier Zip en Java?
J'ai un fichier zip contenant une structure de dossier comme
- principales-dossier de/
- subFolder1/
- subFolder2/
- subFolder3/
- fichier3.1
- fichier3.2
Je voudrais renommer le dossier main-folder
à disons versionXY
à l'intérieur que très zip fichier à l'aide de Java.
Est-il un moyen plus simple que d'extraire l'ensemble du fichier zip et de recréer un nouveau en utilisant le nouveau nom de dossier?
OriginalL'auteur Simon07 | 2009-05-11
Vous devez vous connecter pour publier un commentaire.
Zip est un format d'archive, de sorte que la mutation implique généralement la mise à jour du fichier.
Quelques particularités de zip également obtenir de la manière (zip est plein de "caractéristiques"). Ainsi que le répertoire central à la fin de l'archive, chaque composant fichier est précédé par son nom de fichier. Zip n'ont pas de notion de répertoires - les noms de fichier sont juste des liens qui incluent des caractères " /" (et des sous-chaînes comme "../".
Donc, vous avez vraiment besoin de copier le fichier à l'aide de
ZipInputStream
etZipOutputStream
, renommer comme vous allez. Si vous avez vraiment envie de vous peut réécrire le fichier au lieu de faire votre propre mise en mémoire tampon. Le processus de cause le contenu pour être recomprimé comme la norme API n'a aucun moyen d'obtenir les données sous forme compressée.OriginalL'auteur Tom Hawtin - tackline
Je sais que vous avez demandé à propos de Java, mais seulement pour des fins d'archives, j'ai pensé que je voudrais contribuer d'une note sur .NET.
DotNetZip est un .NET de la bibliothèque pour les fichiers zip qui permet de renommer les entrées. Comme Tom Hawtin déclare dans sa réponse, répertoires ne sont pas des entités de première classe dans le fichier zip de métadonnées, et comme un résultat, pas de zip bibliothèques que je sais d'exposer un "renommer le répertoire" verbe. Mais certaines bibliothèques vous permettent de renommer toutes les entrées qui ont des noms qui indiquent un répertoire particulier, qui vous donne le résultat que vous souhaitez.
Dans DotNetZip, il devrait ressembler à ceci:
Vous pouvez également ajouter ou supprimer des entrées, à l'intérieur de la clause using.
Si vous enregistrez sur le même fichier, puis DotNetZip réécrit seulement la modification des métadonnées - l'entrée des en-têtes et le répertoire central des enregistrements pour la renommé des entrées, ce qui permet de gagner du temps avec de grandes archives. Si vous enregistrez un nouveau fichier ou un flux, puis l'ensemble des données zip qui est écrit.
Je sais. J'ai commencé la réponse en disant que. J'ai seulement voulu la mettre là, au cas où quelqu'un d'autre a fait une recherche de "renommer" et "zip" et n'était pas limitée par Java.
OriginalL'auteur Cheeso
Je pense que vous serez en mesure de trouver de l'aide pour cette tâche à l'aide de la Communes Compresser, en particulier ZipArchiveEntry
OriginalL'auteur Valentin Rocher
C'est de faire le tour. Ultra-rapide, car il ne fonctionne que sur le répertoire central, et non les fichiers.
OriginalL'auteur megasega