12

我正在用 Java 构建文件资源管理器,并在 JTrees 中列出文件/文件夹。我现在要做的是,当我到达一个压缩文件夹时,我想列出它的内容,但没有先提取它。

如果有人有想法,请分享。

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,则可以避免使用几乎不推荐使用的EnumerationZipFile::stream,如下所示:

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

如果你需要知道一个条目是否是一个目录,你可以使用ZipEntry.isDirectory. 与不提取文件相比(出于显而易见的原因),您无法获得更多信息。


如果要避免提取所有文件,可以使用ZipFile.getInputStreamfor each一次提取一个文件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类。它有方法entries(),它返回 ZIP 文件中包含的条目列表。此信息包含在 ZIP 标头中,不需要提取。

于 2012-07-13T09:58:22.297 回答