val*_*tis 1 java zip jar large-files java-8
我有一个包含5个文件的zip文件。其中四个文件很小(几KB),但是一个文件大于4GB。我知道JDK-4681995,它从Java 7开始向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)
Run Code Online (Sandbox Code Playgroud)
压缩文件大小如下:
07/07/2019 10:18 AM 503,966,751 snapshot-20190707.zip
Run Code Online (Sandbox Code Playgroud)
压缩文件的内容为:
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
Run Code Online (Sandbox Code Playgroud)
如果我尝试提取4GB文件,则会遇到一个异常,该异常看上去与64位zip文件的Java 7异常完全相同:
C:\Users\user\Desktop>jar xvf snapshot-20190707.zip database.sql
java.util.zip.ZipException: invalid CEN header (bad signature)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:225)
at java.util.zip.ZipFile.<init>(ZipFile.java:155)
at java.util.zip.ZipFile.<init>(ZipFile.java:126)
at sun.tools.jar.Main.extract(Main.java:1004)
at sun.tools.jar.Main.run(Main.java:305)
at sun.tools.jar.Main.main(Main.java:1288)
Run Code Online (Sandbox Code Playgroud)
是否可以使用Java 8+ jar命令从64位zip归档文件中提取4GB +文件?
此异常是由Java 8中的错误JDK-8223811引起的,该错误由该-f标志触发。提交者使用以下方法重新创建了问题:
jar xvf archive.zip *
Run Code Online (Sandbox Code Playgroud)
来自对该错误报告的评论(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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |