Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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
无法解压缩使用Windows创建的文件";“发送到压缩文件夹”;在scala/java中_Java_Unzip_Zip4j - Fatal编程技术网

无法解压缩使用Windows创建的文件";“发送到压缩文件夹”;在scala/java中

无法解压缩使用Windows创建的文件";“发送到压缩文件夹”;在scala/java中,java,unzip,zip4j,Java,Unzip,Zip4j,通过在windows资源管理器中选择IIS日志文件,然后使用Send To->Compressed zipped文件夹,我在windows 2008 r2虚拟机上压缩了一堆IIS日志文件 我使用java.util.ZipFile、zip4j和ApacheCommons压缩库在scala中编写了不同的程序 zip4j返回:线程“main”net.lingala.zip4j.Exception.zipeexception中的异常:未知的压缩方法 commons compress返回:org.apac

通过在windows资源管理器中选择IIS日志文件,然后使用Send To->Compressed zipped文件夹,我在windows 2008 r2虚拟机上压缩了一堆IIS日志文件

我使用java.util.ZipFile、zip4j和ApacheCommons压缩库在scala中编写了不同的程序

zip4j返回:
线程“main”net.lingala.zip4j.Exception.zipeexception中的异常:未知的压缩方法

commons compress返回:
org.apache.commons.compress.compressors.Compressor异常:未找到流签名的压缩器。

java.util.Zip返回:
java.util.Zip.ZipException:无效的压缩方法

这些zip文件有什么特别之处,以至于没有一个方法可以解压它们

如何使用JVM库解压它们

例如,我使用了以下代码:解压一个文件,它返回了
无效压缩方法
异常

这些是归档文件中的前16个字节:

根据标题信息(来自您文章中的16个字节),zip文件中的此条目是使用Deflate64加密的。不要将放气64与放气压缩混淆。Deflate64是PKWare的商标(PKWare是zip格式的维护者),是Deflate压缩算法的增强版。根据超级用户和github上的数据,如果文件大小大于2GB,Windows将使用Deflate64。zip4j和jdk的zip实用程序还不支持Deflate64,但commons compress 1.16版支持Deflate64。您可能可以尝试使用最新版本的commons compress解压您的zip文件


编辑:或者,如果您有选择,您可以尝试使用其他工具(7zip、zip4j等)创建zip文件。然后,您就不必处理Deflate64,这使您的zip文件与其他工具兼容。

7-zip可以打开zip文件吗?是的,7-zip可以打开文件。我发布了一个屏幕截图,其中headerZIP中的字节支持多种压缩方法,而Windows中使用的压缩方法可能是Java运行时不支持的一种罕见方法(请参阅)。使用7-zip调查您的zip文件,以确定是否存在这种情况。确实,zip文件包含多个日志文件,解压后的日志文件总数约为16gb。每个文件的大小在100到300 mb之间。归档文件大约有1.2GB。好吧,老实说,我简直不敢相信JDK没有涵盖这一点,而且它是开箱即用的。从白盒的角度来看,在java.util.zip上,我不应该关心它是Deflate64还是Deflate,而只是简单地使用API。