12

Java でファイル エクスプローラーを構築しており、JTree でファイル/フォルダーを一覧表示しています。私が今やろうとしているのは、圧縮されたフォルダーにたどり着いたときに、その内容を一覧表示したいのですが、最初に解凍しません。

誰かがアイデアを持っている場合は、共有してください。

4

3 に答える 3

23

をご覧になることをお勧めしますZipFile.entries()

ここにいくつかのコードがあります:

try (ZipFile zipFile = new ZipFile("test.zip")) {
    Enumeration zipEntries = zipFile.entries();
    while (zipEntries.hasMoreElements()) {
        String fileName = ((ZipEntry) zipEntries.nextElement()).getName();
        System.out.println(fileName);
    }
}

Java 8を使用している場合は、次のように使用して、ほとんど非推奨のEnumerationクラスの使用を避けることができZipFile::streamます。

zipFile.stream()
       .map(ZipEntry::getName)
       .forEach(System.out::println);

エントリがディレクトリかどうかを知る必要がある場合は、 を使用できますZipEntry.isDirectory。ファイルを抽出しない場合よりも多くの情報を取得することはできません (明らかな理由により)。


すべてのファイルを抽出したくない場合は、 ZipFile.getInputStreamfor eachを使用して一度に 1 つのファイルを抽出できますZipEntry。(アンパックされたデータをディスクに保存する必要がないことに注意してください。入力ストリームを読み取って、そのバイトを破棄するだけで済みます。

于 2012-07-13T09:57:38.820 に答える
10

java.util.zip.ZipFileクラス、特にそのentriesメソッドを使用します。

次のようなものがあります。

ZipFile zipFile = new ZipFile("testfile.zip");
Enumeration zipEntries = zipFile.entries();
String fname;
while (zipEntries.hasMoreElements()) {
    fname = ((ZipEntry)zipEntries.nextElement()).getName();
    ...
}
于 2012-07-13T09:59:10.463 に答える
1

ZIP ファイルを処理するには、クラスZipFileを使用できます。ZIPファイルに含まれるエントリのリストを返すentries()メソッドがあります。この情報は ZIP ヘッダーに含まれており、抽出は必要ありません。

于 2012-07-13T09:58:22.297 に答える