web-dev-qa-db-fra.com

Comment créer un flux d'entrée à partir d'un ZipEntry

J'ai une classe qui encapsule ZipEntrys, mais j'ai du mal à voir comment je pourrais ensuite écrire une méthode qui renvoie un flux d'entrée à partir de n'importe quel ZipEntry. J'ai réussi à écrire quelque chose qui pourrait renvoyer un tableau de flux d'entrée pour un ZipFile, mais j'ai besoin d'un moyen d'obtenir un flux d'entrée à partir d'un seul ZipEntry.

34
Stephen

N'avez-vous pas l'instance ZipFile à partir de laquelle ZipEntry a été obtenue? Si vous le faites, vous pouvez utiliser ZipFile.getInputStream (ZipEntry).

https://docs.Oracle.com/javase/8/docs/api/Java/util/Zip/ZipFile.html

PS. Je viens de jeter un coup d'œil au code et un ZipEntry n'est pas un wrapper pour les données sous-jacentes dans le fichier Zip. C'est juste un "espace réservé" pour l'entrée pour autant que je puisse voir (c'est-à-dire les attributs de fichier zippés pas les données). Le flux réel est créé via un appel JNI dans la classe ZipFile. Cela signifie que je ne crois pas que vous puissiez faire ce que vous cherchez à faire de manière pratique.

24
Malcolm Featonby

Que dis-tu de ça?

ZipFile zipFile = new ZipFile("file.Zip");
ZipEntry zipEntry = zipFile.getEntry("fileName.txt");       
InputStream inputStream = zipFile.getInputStream(zipEntry);
29
Ovi Tisler
 static void printInputStream(File Zip) throws IOException
    {
        ZipInputStream zin = new ZipInputStream(new FileInputStream(Zip));
        for (ZipEntry zipEntry;(zipEntry = zin.getNextEntry()) != null; )
        {
            System.out.println("reading zipEntry " + zipEntry.getName());
            Scanner sc = new Scanner(zin);
            while (sc.hasNextLine())
            {
                System.out.println(sc.nextLine());
            }
            System.out.println("reading " + zipEntry.getName() + " completed");
        }
       zin.close();
    }

Il a été trouvé ici:
getInputStream pour un ZipEntry de ZipInputStream (sans utiliser la classe ZipFile)

Incompréhension sur le flux d'entrée ouvert à partir du fichier Zip. Solution: ouvrez le flux d'entrée à partir du fichier Zip ZipInputStream zipInputStream = ZipInputStream(new FileInputStream(zipfile), exécutez le cycle zipInputStream.getNextEntry(). Pour chaque tour, vous avez le flux d'entrée pour l'entrée actuelle (ouvert pour le fichier Zip avant); ..

9
Aleks Farrier