Android 解压缩zip文件时会显示“压缩”;java.util.zip.ZipException:无法读取版本";或;java.util.ZipException无法读取本地标头版本45“;
我只想提取一个普通的zip文件,但它总是失败。 这是我现在使用的代码:Android 解压缩zip文件时会显示“压缩”;java.util.zip.ZipException:无法读取版本";或;java.util.ZipException无法读取本地标头版本45“;,android,.net,file,zip,unzip,Android,.net,File,Zip,Unzip,我只想提取一个普通的zip文件,但它总是失败。 这是我现在使用的代码: private File downloadPath = new File(Environment.getExternalStorageDirectory() + "/Test/file.zip"); private File unzipLoc = new File(Environment.getExternalStorageDirectory() + "/Test/"); FileInputStream fi
private File downloadPath = new File(Environment.getExternalStorageDirectory() + "/Test/file.zip");
private File unzipLoc = new File(Environment.getExternalStorageDirectory() + "/Test/");
FileInputStream fin = new FileInputStream(downloadPath);
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null)
{
FileOutputStream fout = new FileOutputStream(unzipLoc + ze.getName());
for (int c = zin.read(); c != -1; c = zin.read())
{
fout.write(c);
}
zin.closeEntry();
fout.close();
}
zin.close();
它在'zin.getNextery()'部分失败。
错误:java.util.zip.ZipException:无法读取版本
有什么想法吗?谢谢 看起来您的zip文件比“解压库”更新 如果您阅读源代码: (搜索新ZipException(“无法读取版本”)) 它显示它检查zip文件的版本。然后看看它,这是解压缩zip所需的最低版本 检查您的zip文件,并使用较低版本的zip软件重新保存/zip文件,无需进行压缩测试
或者更新你的Zip库(你不能像使用内部android Zip库那样做)。只是为了补充上述问题解决方案的答案,以及为什么在我的案例中创建Zip库。是的,特别感谢Bungle先生和Blundell先生帮助快速理解和解决问题 在解压SD卡上的文件时,我遇到了这样一个异常:“java.util.ZipException无法读取本地头版本45”。zip文件是从dotnet服务器下载的,服务器使用SharpZipLib库解压文件。从例外情况来看,这显然意味着压缩库和解压缩库有不同的版本 解决方案: 基本上,库SharpZipLib使用Zip64(zip文件格式的扩展格式来压缩文件),这与android和7之前的java版本中提供的java.util.zip包不兼容 因此,如果您在压缩文件的服务器上切换Zip64,那么它将与android java.util.zip包兼容,并且可以轻松解压缩。如果在服务器上添加以下行,将解决您的问题:
ZipOutputStream.UseZip64 = UseZip64.Off
听起来你的ZIP文件无效。我现在注意到我的文件是zip64。如何将其转换为普通zip文件?或者如何在android中读取这些文件?zip64也是我失败的原因,我正在使用Appcelerator for AndroidI中的压缩模块使用SharpZipLib创建zip,将标题版本设置为45。我将ZipOutputStream.UseZip64=UseZip64.Off设置为Off。在这之后,在Android上解压就没有问题了。如果我们无法控制文件的解压方式呢?有什么建议吗?