Module jdk.zipfs


module jdk.zipfs
提供了Zip文件系统提供程序的实现。Zip文件系统提供程序将Zip或JAR文件的内容视为文件系统。

访问Zip文件系统

FileSystems newFileSystem 静态工厂方法可用于:
  • 创建一个Zip文件系统
  • 将现有文件打开为Zip文件系统
Zip文件系统提供程序不支持打开包含名称元素中包含“.”或“..”的现有Zip文件。

用于标识Zip文件系统的URI方案

标识ZIP文件系统的URI schemejar

POSIX文件属性

Zip文件系统支持一个名为“zip”的文件属性视图,定义了以下文件属性:
支持的属性
名称 类型
permissions Set<PosixFilePermission>
“permissions”属性是可选存储在Zip文件条目中的访问权限集。对于没有访问权限的条目,属性的值为 null。Zip文件系统不强制执行访问权限。

可以使用Files.getAttributeFiles.setAttribute方法读取和设置“permissions”属性。以下示例使用这些方法来读取和设置属性:

 
     Set<PosixFilePermission> perms = Files.getAttribute(entry, "zip:permissions");
     if (perms == null) {
         perms = PosixFilePermissions.fromString("rw-rw-rw-");
         Files.setAttribute(entry, "zip:permissions", perms);
     }
  

除了“zip”视图外,Zip文件系统还可以选择支持“PosixFileAttributeView”(“posix”)。此视图通过类型安全地访问ownergroup-ownerpermissions属性扩展了“basic”视图。“posix”视图仅在使用提供程序属性“enablePosixFileAttributes”设置为“true”时支持。以下示例创建了一个具有此属性的文件系统,并读取文件的访问权限:

 
     var env = Map.of("enablePosixFileAttributes", "true");
     try (FileSystem fs = FileSystems.newFileSystem(file, env) {
         Path entry = fs.getPath("entry");
         Set<PosixFilePermission> perms = Files.getPosixFilePermissions(entry);
     }
  

文件所有者和组所有者属性不会持久保存,这意味着它们不会存储在zip文件中。“defaultOwner”和“defaultGroup”提供程序属性(下面列出)可用于配置这些属性的默认值。如果未设置这些属性,则文件所有者默认为zip文件的所有者,组所有者默认为zip文件的组所有者(或在不支持组所有者的平台上默认为文件所有者)。

在“posix”视图中,“permissions”属性是不可选的,因此对于在Zip文件中未存储访问权限的条目,将使用默认权限集。默认权限集为

默认权限可以使用下面描述的“defaultPermissions”属性进行配置。

Zip文件系统属性

创建Zip文件系统时可以指定以下属性:
  • 如果值为 "STORED",则Zip文件系统提供程序在写入Zip文件系统时不会压缩条目。
  • 如果值为 "DEFLATED" 或未设置属性,则Zip文件系统提供程序在写入Zip文件系统时将使用数据压缩。
  • 如果值不是 "STORED""DEFLATED",则在创建Zip文件系统时将抛出IllegalArgumentException
多版本JAR时要使用的版本条目的值。如果JAR不是 多版本JAR,则该值将被忽略,并且JAR将被视为无版本。 Java SE平台版本号,例如 914,以确定版本条目。

  • 如果值为null或未设置属性,则JAR将被视为无版本JAR。
  • 如果值为"runtime",则版本条目将通过调用Runtime.Version.feature()确定。
  • 如果值不表示有效的Java SE平台版本号,则将抛出IllegalArgumentException
创建新Zip文件系统时可以指定的可配置属性
属性名称 数据类型 默认值 描述
create StringBoolean false 如果值为 true,则Zip文件系统提供程序将在不存在时创建新的Zip或JAR文件。
encoding String UTF-8 该值表示Zip或JAR文件中条目名称的编码方案。
enablePosixFileAttributes StringBoolean false 如果值为 true,则Zip文件系统将支持PosixFileAttributeView
defaultOwner UserPrincipal
String
null/unset 覆盖Zip文件系统中条目的默认所有者。
该值可以是UserPrincipal或用作UserPrincipal名称的String值。
defaultGroup GroupPrincipal
String
null/unset 覆盖Zip文件系统中条目的默认组。
该值可以是GroupPrincipal或用作GroupPrincipal名称的String值。
defaultPermissions Set<PosixFilePermission>
String
null/unset 覆盖Zip文件系统中条目的默认权限集。
该值可以是Set<PosixFilePermission>或
PosixFilePermissions::fromString解析的String。
compressionMethod String "DEFLATED"
releaseVersion StringInteger null/unset

示例:

构建一个由URI标识的新Zip文件系统。如果Zip文件不存在,将创建它:
 

     URI uri = URI.create("jar:file:/home/luckydog/tennisTeam.zip");
     Map<String, String> env = Map.of("create", "true");
     FileSystem zipfs = FileSystems.newFileSystem(uri, env);
 
 
构建一个新的Zip文件系统,通过指定路径并使用自动文件类型检测来识别。从JAR的根目录开始迭代,显示每个找到的条目:
 

     FileSystem zipfs = FileSystems.newFileSystem(Path.of("helloworld.jar"));
     Path rootDir = zipfs.getPath("/");
     Files.walk(rootDir)
            .forEach(System.out::println);
 
 
模块图:
jdk.zipfs的模块图jdk.zipfs的模块图
自JDK版本:
9
  • Services

    Provides
    Type
    Description
    文件系统的服务提供者类。