我无法使用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可扩展数据字段”一章中的其他信息。额外应该开始
标头ID为2个字节(在我的情况下为“ 0x000d UNIX”
和2个字节的数据大小
但是前两个字节始终为[85,84],而后有字节数组[9,0]。
也许这就是为什么ZipArchiveEntry无法返回好的布尔值的原因。
有人可以给我一些解释吗?
提前致谢。
最佳答案
我遇到了同样的问题。事实证明,ZipArchiveInputStream
带有以下警告(强调我的意思):
当从文件中读取文件时,首选ZipFile类,因为ZipArchiveInputStream受限于在返回条目之前无法读取中央目录头。特别是ZipArchiveInputStream
可能会返回根本不属于中央目录的条目,并且不应将其视为存档的一部分。
可能会返回多个具有相同名称的条目。
不会返回内部或外部属性。
可能会返回不完整的额外字段数据。
如果档案使用数据描述符功能,则可能会返回未知的条目大小和CRC值,直到到达下一个条目为止。
虽然该问题专门询问有关ZipArchiveInputStream
的问题,但我想我也同意切换到ZipFile
可以为我解决问题。