列出.zip目录而不解压缩

时间:2012-07-13 09:54:32

标签: java zip

我正在使用Java构建文件资源管理器,我正在列出JTree中的文件/文件夹。我现在要做的是当我到达一个压缩文件夹时,我想列出其内容,但不先将其解压缩。

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

3 个答案:

答案 0 :(得分:15)

我建议您查看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.getInputStream为每个ZipEntry一次提取一个文件。 (请注意,您不需要将解压缩的数据存储在磁盘上,您可以随时读取输入流并丢弃字节。

答案 1 :(得分:9)

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

答案 2 :(得分:1)

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