我正在使用Java构建文件资源管理器,我正在列出JTree中的文件/文件夹。我现在要做的是当我到达一个压缩文件夹时,我想列出其内容,但不先将其解压缩。
如果有人有想法,请分享。
答案 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)