列出.zip目录而不提取

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

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

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

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

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