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
使用Java8JAR命令从zip存档中提取4GB+文件时出现“无效的CEN头(错误签名)”_Java_Java 8_Jar_Zip_Large Files - Fatal编程技术网

使用Java8JAR命令从zip存档中提取4GB+文件时出现“无效的CEN头(错误签名)”

使用Java8JAR命令从zip存档中提取4GB+文件时出现“无效的CEN头(错误签名)”,java,java-8,jar,zip,large-files,Java,Java 8,Jar,Zip,Large Files,我有一个包含5个文件的zip文件。其中四个文件小到几kB,但有一个文件大于4GB。我知道,从Java7开始,它为Java添加了大文件支持64位zip支持。我在Windows 8.1上使用64位Java 8: C:\Users\user\Desktop>java -version java version "1.8.0_212" Java(TM) SE Runtime Environment (build 1.8.0_212-b10) Java HotSpot(TM) 64-Bit Serv

我有一个包含5个文件的zip文件。其中四个文件小到几kB,但有一个文件大于4GB。我知道,从Java7开始,它为Java添加了大文件支持64位zip支持。我在Windows 8.1上使用64位Java 8:

C:\Users\user\Desktop>java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
zip文件大小如下所示:

07/07/2019  10:18 AM       503,966,751 snapshot-20190707.zip
zip文件的内容包括:

07/07/2019  09:53 AM                67 database.sha1
07/07/2019  09:51 AM     4,508,840,068 database.sql
07/07/2019  09:53 AM                74 database_schema.sha1
07/07/2019  09:51 AM            36,386 database_schema.sql
07/07/2019  09:51 AM            45,280 backup.log
如果我尝试提取4GB文件,我会遇到一个异常,它看起来与以下情况完全相同:


有没有办法使用Java 8+jar命令从64位zip存档中提取4GB+文件?

此异常是由Java 8中的错误引起的,该错误由-f标志触发。提交者使用以下方法重新创建了问题:

jar xvf archive.zip *
根据2019年5月19日对缺陷报告的评论:

这仅在JDK 8版本上重复。它在JDK 9和 并且在最新的JDK 11、12或13中不是问题

Java 8的解决方法是避免在使用-f标志时指定单个文件,并简单地提取存档中的所有文件:

此版本的命令成功提取所有文件,没有任何问题:

C:\Users\user\Desktop>jar xvf snapshot-20190707.zip
 inflated: backup.log
 inflated: database_schema.sha1
 inflated: database_schema.sql
extracted: database.sha1
 inflated: database.sql

这个异常是由Java8中的bug引起的,该bug由-f标志触发。提交者使用以下方法重新创建了问题:

jar xvf archive.zip *
根据2019年5月19日对缺陷报告的评论:

这仅在JDK 8版本上重复。它在JDK 9和 并且在最新的JDK 11、12或13中不是问题

Java 8的解决方法是避免在使用-f标志时指定单个文件,并简单地提取存档中的所有文件:

此版本的命令成功提取所有文件,没有任何问题:

C:\Users\user\Desktop>jar xvf snapshot-20190707.zip
 inflated: backup.log
 inflated: database_schema.sha1
 inflated: database_schema.sql
extracted: database.sha1
 inflated: database.sql

你用其他工具试过那个文件吗?看起来您的文件已损坏…这很奇怪,因为您可以提取整个内容。是的,SHA-1哈希已通过两个不同平台上的多个不同工具进行验证,该文件可以使用7zip和Windows资源管理器提取,也可以在Linux上解压缩。jar命令失败,在Windows和Linux上都出现相同的错误。我用几个zip文件重现了这个问题。你用其他工具试过这个文件吗?看起来您的文件已损坏…这很奇怪,因为您可以提取整个内容。是的,SHA-1哈希已通过两个不同平台上的多个不同工具进行验证,该文件可以使用7zip和Windows资源管理器提取,也可以在Linux上解压缩。jar命令失败,在Windows和Linux上都出现相同的错误。我用几个zip文件重现了这个问题。