Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 解压缩zip文件时会显示“压缩”;java.util.zip.ZipException:无法读取版本";或;java.util.ZipException无法读取本地标头版本45“;_Android_.net_File_Zip_Unzip - Fatal编程技术网

Android 解压缩zip文件时会显示“压缩”;java.util.zip.ZipException:无法读取版本";或;java.util.ZipException无法读取本地标头版本45“;

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

我只想提取一个普通的zip文件,但它总是失败。 这是我现在使用的代码:

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上解压就没有问题了。如果我们无法控制文件的解压方式呢?有什么建议吗?