我正在建立一个Java文件浏览器,我列出了JTrees中的文件/文件夹。我现在想要做的是当我到达一个压缩文件夹时,我想列出它的内容,但是没有先提取它。列表.zip目录没有解压
如果有人有想法,请分享。
我正在建立一个Java文件浏览器,我列出了JTrees中的文件/文件夹。我现在想要做的是当我到达一个压缩文件夹时,我想列出它的内容,但是没有先提取它。列表.zip目录没有解压
如果有人有想法,请分享。
我建议你看看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();
...
}
我已经尝试过这一点,但我必须知道它是什么类型的文件,这将几乎给我的文件/文件夹的名称,我必须知道它是一个文件,一个文件夹等。 – 2012-07-13 10:07:03
既然java 7,我会说通过'FileSystem','Path'和'Files'使用NIO是一个更容易(和统一的方式)或解决这个问题。请参阅:http://stackoverflow.com/a/37413531/80779和http://stackoverflow.com/a/37413128/80779 – LordOfThePigs 2016-05-24 12:29:25