解压zip文件给出“java.util.zip.ZipException:无法读取版本”或“java.util.ZipException无法读取本地头版本45”
我想提取一个普通的zip文件,但它保持失败。 这是我的代码,我现在使用:解压zip文件给出“java.util.zip.ZipException:无法读取版本”或“java.util.ZipException无法读取本地头版本45”
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.getNextEntry()”的一部分。 错误:java.util.zip.ZipException:无法读取版本 任何想法?谢谢!
看起来你的zip文件比你的'解压缩库'更新。
如果你读了源:
ZipInputStream(搜索抛出:ZipException新( “无法读取版本”))
它显示了它检查的zip文件版本。然后看Wikipedia它显示这是提取zip所需的最低版本。
检查您的zip文件,并将其与你的拉链软件的较低版本重新保存/无压缩压缩再它来测试
或者更新您的邮编库(你不能做你的作为使用内部的Android zip库)。
只需添加上述问题解决方案的答案,以及为什么在我的情况下创建。是特别感谢班格先生和布伦戴尔先生帮助我们迅速理解和解决问题。
我在解压缩SD卡上的文件时,遇到了此异常,指出“java.util.ZipException无法读取本地头版本45”。该zip文件是从DOT NET服务器下载的,服务器使用SharpZipLib库来解压缩这些文件。从例外情况来看,这显然意味着压缩和解压缩库有不同的版本。
解决方案:
基本上SharpZipLib使用ZIP64(zip文件格式的扩展格式来压缩文件)哪个是不符合java.util.zip包在机器人和上的Java的可用库释放前7
因此,如果您在压缩文件的服务器上切换Zip64,那么它将与android java.util.zip软件包兼容,并且很容易解压缩。如果您在服务器上添加以下行,它将解决您的问题:
ZipOutputStream.UseZip64 = UseZip64.Off
如果我们无法控制文件如何压缩,该怎么办?有什么建议么? – alpinescrambler
听起来像您的ZIP文件无效。 – SLaks