【问题标题】:List .zip directories without extracting列出 .zip 目录而不解压缩
【发布时间】:2012-07-13 04:00:39
【问题描述】:

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

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

【问题讨论】:

标签: java zip


【解决方案1】:

我建议你看看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,则可以使用 ZipFile::stream 避免使用几乎已弃用的 Enumeration 类,如下所示:

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

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


如果您想避免提取所有文件,您可以使用ZipFile.getInputStream 为每个ZipEntry 一次提取一个文件。 (请注意,您不需要将解压后的数据存储在磁盘上,您只需读取输入流并丢弃字节即可。

【讨论】:

【解决方案2】:

使用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();
    ...
}

【讨论】:

  • 我试过这个,但我必须知道里面有什么类型的文件,这几乎只会给我文件/文件夹的名称,我必须知道它是否是一个文件,文件夹等。
【解决方案3】:

要处理 ZIP 文件,您可以使用 ZipFile 类。它有方法entries(),它返回包含在ZIP 文件中的条目列表。此信息包含在 ZIP 标头中,不需要提取。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多