JAVA的ZipFile entries()方法无法查看目录。

5

我正在处理数字文档和数字签名,并遇到了一个问题。

输入:documentX.adoc - 带有文件和文件夹的zip文件。

我需要获取输入文件中的所有内容 - 文件夹和文件列表。

我的解决方案:

ZipFile adocFile = new ZipFile(documentXFileName);
ArrayList <String> adocFiles = new ArrayList<String>();
Enumeration <? extends ZipEntry> entries;
entries = adocFile.entries();
for (entries = adocFile.entries(); entries.hasMoreElements();)
{
    adocFiles.add(entries.nextElement().getName());
}

我尝试创建ArrayList 并添加ZipEntries而不是名称 - 仍然没有结果。也许还有其他方法?奇怪的是,ZipEntry有一个.isDirectory()方法...
感谢您的帮助, 马丁

你检查过压缩文件,确保其中的目录是否已经被创建了吗? - Powerlord
你的代码看起来没问题。也许可以在某个外部压缩工具中打开zip文件(根据给定的文件名),并仔细检查文件是否包含条目?如果这样可以,那么可能是Java实现不支持的格式问题,但我真的不知道... - Andrzej Doyle
是的,目录都在那里。我可以使用Far Manager浏览zip文件,看到所有的目录,并且可以提取它们以查看目录。 - Brutus
顺便说一句,Andrzej Doyle,感谢您纠正这篇文章。 - Brutus
1个回答

12

根据文档的说明:

以“/”结尾的名称被定义为目录条目(directory entry)。

在ZIP文件中存储目录不是必需的,因为它们是可选条目。可以存储路径为 foo/bar.txt 的字节序列,而不需要名为foo的条目。即使这些条目不存在于归档文件中,ZIP工具也可能提供这样的幻觉。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接