ZipEntry.isDirectory()和Enumeration <! - ?扩展ZipEntry - >只查看目录内容,而不是目录

时间:2014-07-02 00:23:35

标签: java zip

我正在查看.zip文件以确认所有包含的文件都已正确命名,并遇到麻烦。这是文件层次结构:

-.zip
  -dir
    -file1
    -file2
    -file3
  -file4
  -file5
  -file6

代码:

for (Enumeration<? extends ZipEntry> e = zf.entries(); e.hasMoreElements(); ) {
            ZipEntry entry = e.nextElement();
            System.out.println("ZipEntry name: " + entry.getName());
            ...
}

常用输出:

ZipEntry name: dir/file1
ZipEntry name: dir/file2
ZipEntry name: dir/file3
ZipEntry name: file4
ZipEntry name: file5
ZipEntry name: file6

所需的输出还包含

ZipEntry name: dir/

奇怪的是,我有一个测试用例,我得到了所需的输出:当使用通过电子邮件发送给我的相同层次结构的.zip时。每当我使用我在机器上压缩的.zips时,我都会得到&#34; Usual输出。&#34;我真的很想拥有一致的行为,但我无法弄清楚出了什么问题。有什么想法吗?

提前致谢!

1 个答案:

答案 0 :(得分:4)

zip文件中没有真正的目录。有条目。并且ZipEntry#isDirectory()检查条目的名称是否以/结尾,以确定它是否应被视为目录。那么你的zip文件包含的是

dir/file1
dir/file2
dir/file3
file4
file5
file6

对于那种奇怪的情况,zip实际上可能包含

dir/   // the entry won't actually have any content though
dir/file1
dir/file2
dir/file3
file4
file5
file6

这对于zip文件管理器确定如何提取条目非常有用。