如何使用 Zip 文件系统设置压缩级别(无)

rek*_*ord 2 java compression zip

我正在使用Zip 文件系统提供程序来创建一个 zip 存档:

URI uri = URI.create("jar:file:/codeSamples/zipfs/zipfstest.zip");
FileSystem fs = FileSystems.newFileSystem(uri, env);
Run Code Online (Sandbox Code Playgroud)

如何将压缩级别设置为无以及默认压缩级别是多少。

我检查了属性(env),没有针对此的选项。

Sub*_*mal 5

根据 Java 版本,有不同的可能性。

对于 Java 版本 >= 7 和 < 12

  • 使用 zipfs,您无法控制压缩级别,因为使用默认值
  • 或者,您可以使用java.util.zip.ZipOutputStream可以控制每个ZipEntry
    起点的压缩方法的位置可能是这篇文章创建 ZIP 和 JAR 文件

对于 Java 版本 >= 12

  • 有一个选项noCompression来控制压缩方法

  • 重要的部分是

     Map<String, String> env = new HashMap<>();
     // to store the files in the ZIP
     env.put("noCompression", "true");
    
     FileSystem zipfs = FileSystems.newFileSystem(uri, env);
    
    Run Code Online (Sandbox Code Playgroud)

爪哇 >= 14

该选项将从noCompressionto重命名compressionMethod(请参阅此 CSR JDK-8231248)。

编辑:根据@Phil Brown的评论,我对 Java 11 和“noCompression”选项进行了一些快速研究。

似乎OpenJDK 源代码中的提交196c20c0d1 已向后移植到某些 Java 11 版本,但并未移植到所有版本中(至少在 Oracle JDK 11 中没有)。因此,如果您想在 Java 11 版本中使用此选项,则需要检查您的特定供应商 JDK/JRE 是否支持该选项。