我正在用 Java 构建文件资源管理器,并在 JTrees 中列出文件/文件夹。我现在要做的是,当我到达一个压缩文件夹时,我想列出它的内容,但没有先提取它。
如果有人有想法,请分享。
我建议你看看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
for each一次提取一个文件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();
...
}