web-dev-qa-db-ja.com

ZipEntryから入力ストリームを作成する方法

ZipEntryをラップするクラスがありますが、ZipEntryの1つから入力ストリームを返すメソッドを作成する方法を理解するのに苦労しています。 ZipFileの入力ストリームの配列を返すことができるものをなんとか書くことができましたが、1つのZipEntryからのみ入力ストリームを取得する方法が必要です。

34
Stephen

ZipEntryのソースであるZipFileインスタンスがありませんか?その場合は、ZipFile.getInputStream(ZipEntry)を使用できます。

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

PS。コードをざっと見ただけで、ZipEntryはZipファイル内の基になるデータのラッパーではありません。私が見る限り、これはエントリの単なる「プレースホルダー」です(つまり、データではなく圧縮されたファイル属性)。実際のストリームは、ZipFileクラスのJNI呼び出しを通じて作成されます。つまり、あなたが望んでいることを実際的な方法で実行できるとは信じていません。

24

これはどう?

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();
    }
_

ここで見つかりました:
ZipInputStreamからのZipEntryのgetInputStream(ZipFileクラスを使用しない)

Zipファイルから開いた入力ストリームが何であるかについての誤解。解決策:ZipファイルZipInputStream zipInputStream = ZipInputStream(new FileInputStream(zipfile)から入力ストリームを開き、サイクルzipInputStream.getNextEntry()を実行します。すべてのラウンドで、現在のエントリの入力ストリームがあります(以前にZipファイル用に開かれています)。 ..

9
Aleks Farrier