7
votes

Lecture de fichiers d'une archive zippée intégrée

J'ai une archive zip qui est intégrée à l'intérieur d'un fichier plus grand. Je connais le décalage de départ de l'archive dans le fichier plus grand et sa longueur.

Y a-t-il des bibliothèques Java qui me permettraient de lire directement les fichiers contenus dans l'archive? Je pense dans le sens des lignes de zipfile.getinputStream () . Malheureusement, zipfile < / a> ne fonctionne pas pour ce cas d'utilisation car ses constructeurs nécessitent un fichier zip autonome.

Pour des raisons de performance, je ne peux pas copier la fermeture à glissière dans un fichier séparé avant d'l'ouvrir.

edit: juste pour être clair, j'ai un accès aléatoire au fichier.


3 commentaires

java.util.zip.zipinputtream.zipInphatStream (InputStream) ?


Difficile. Avec un fichier zip, vous devez d'abord lire le répertoire, ce qui est à la fin, vous avez donc besoin d'un accès aléatoire. Vous auriez lire toutes les entrées en une fois depuis le début, et cela fonctionnerait avec la plupart des fichiers zip, mais le format lui-même permet de faire des choses amusantes telles que des entrées en double et des données indésirables aléatoires entre les entrées.


@Thilo: Juste pour être clair, j'ai un accès aléatoire au fichier.


7 Réponses :


1
votes

1.Create FileInputStream FIS = Nouveau fichierInputtream (..);

  1. Positionnez-le au début de Zipfile intégré: fis.skip (offset);

  2. Ouvrir ZipInputStream (FIS)


1 commentaires

Cela devrait fonctionner pour la plupart des fichiers, mais le format de fichier zip permet de créer des trucs étranges telles que des entrées en double et des données indésirables aléatoires entre les entrées, il serait donc préférable d'avoir un accès aléatoire et de lire le répertoire à la fin de l'archive.



0
votes

Si vous utilisez Java SE 7, il fournit un système ZIP FIE qui vous permet de lire / écrire des fichiers dans le zip directement: http://docs.oracle.com/javase/7/docs/technotes/guides/io/fsp/zipfileSystemProvider.html


0 commentaires

-1
votes

7-zip-javabinding est un wrapper Java pour le bibliothèque de 7-zip C ++.

the extrait de code page en particulier a quelques exemples intéressants, y compris l'impression d'une liste d'articles dans un Archivez, extrayant un seul fichier et ouvrant des archives à plusieurs parties.


0 commentaires

7
votes

J'ai proposé un piratage rapide (qui doit être désinfecté ici et là), mais il lit le contenu des fichiers d'une archive zippée qui est intégré à l'intérieur d'un goudron. Il utilise Java6, FileInputStream, Zipenterry et ZipInputStream. ' fonctionne sur ma machine locale ': xxx


0 commentaires

-1
votes

Vérifiez si zip4j vous aide ou non.

Vous pouvez essayer Partissuistream à lire Fichier zip selon votre cas d'utilisation.

Je pense qu'il est préférable de créer un fichier zip temp, puis d'y accéder.


0 commentaires

1
votes

Je suggère d'utiliser TrueZip , il fournit un accès système de fichiers à de nombreux types d'archives. Cela a bien fonctionné pour moi dans le passé.


0 commentaires

0
votes

Je pense que Apache Commons Compressez peut vous aider.

Il existe une classe org.apache.commons.compress.archivers.zip.ziparchive

Il a une méthode getdataoffset () , qui peut obtenir le décalage du flux de données dans le fichier d'archive.


0 commentaires