我在使用apache commons-compress-1.6库从Android上的zip存档解压缩符号链接时遇到了麻烦。
当我得到ZipArchiveEntry时,有一个名为isUnixSymlink()的方法,它告诉该文件是否是符号链接,但它总是返回false。
InputStream inputStream = new FileInputStream(archive);
ZipArchiveInputStream zipInputStream = new ZipArchiveInputStream(inputStream);
ZipArchiveEntry ze = null;
while ((ze = zipInputStream.getNextZipEntry()) != null) {
File path = new File("/tmp/user/folder", ze.getName());
byte[] extras = ze.getExtra();
boolean isSymlink = ze.isUnixSymlink();
我阅读了这里的文档:http://www.pkware.com/documents/casestudies/APPNOTE.TXT,他们正在讨论“4.5可扩展数据字段”一章中的额外信息。额外应该开始
头标识为2个字节(在我的情况下应为“0x000d UNIX”
和2个字节的数据大小
但是两个第一个字节总是[85,84],并且在我有字节数组[9,0]之后。
也许这就是为什么ZipArchiveEntry无法返回好的布尔值。 有人可以就此案给我一些解释吗?
提前致谢。
答案 0 :(得分:0)
好的,我发现在解压缩源文件中找到zip文件额外数据的正确方法...没有找到任何文档(如果有人,请发给我们一个链接)
两个第一个字节数组是一个通用时间戳。接下来的两个字节数组是下一个数据的大小,其中包含pkware数据作为访问时间,修改时间为eso。
接下来的两个字节数组也是标题id,接下来的两个是数据大小,最后一个字节是额外的信息。
但是即使我解释它们,甚至java代码都在Unix文件系统上运行,我也没有得到关于该文件的任何信息是符号链接。
答案 1 :(得分:0)
我遇到了同样的问题。事实证明,ZipArchiveInputStream
附带以下警告(强调我的):
从文件读取时首选ZipFile类,因为ZipArchiveInputStream因返回条目前无法读取中央目录标题而受到限制。特别是ZipArchiveInputStream
- 可能会返回完全不属于中心目录的条目,并且不应被视为归档的一部分。
- 可能会返回多个具有相同名称的条目。
- 不会返回内部或外部属性。
- 可能会返回不完整的额外字段数据。
如果存档使用数据描述符功能,- 可能会为条目返回未知大小和CRC值,直到达到下一个条目。
虽然问题明确询问ZipArchiveInputStream
,但我想我会分享转换为ZipFile
为我解决问题。