我无法使用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可以为我解决问题。

08-26 10:56