Module jdk.zipfs
module jdk.zipfs
提供了Zip文件系统提供程序的实现。Zip文件系统提供程序将Zip或JAR文件的内容视为文件系统。
多版本JAR时要使用的版本条目的值。如果JAR不是
多版本JAR,则该值将被忽略,并且JAR将被视为无版本。
访问Zip文件系统
FileSystemsnewFileSystem 静态工厂方法可用于:
- 创建一个Zip文件系统
- 将现有文件打开为Zip文件系统
用于标识Zip文件系统的URI方案
标识ZIP文件系统的URIscheme 是 jar。
POSIX文件属性
Zip文件系统支持一个名为“zip”的文件属性视图,定义了以下文件属性:
“permissions”属性是可选存储在Zip文件条目中的访问权限集。对于没有访问权限的条目,属性的值为
名称 类型 permissions Set<PosixFilePermission>
null。Zip文件系统不强制执行访问权限。
可以使用Files.getAttribute和Files.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”)。此视图通过类型安全地访问owner、group-owner和permissions属性扩展了“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。
Java SE平台版本号,例如
9或
14,以确定版本条目。
- 如果值为
null或未设置属性,则JAR将被视为无版本JAR。 - 如果值为
"runtime",则版本条目将通过调用Runtime.Version.feature()确定。 - 如果值不表示有效的Java SE平台版本号,则将抛出
IllegalArgumentException。
| 属性名称 | 数据类型 | 默认值 | 描述 |
|---|---|---|---|
| create | String 或 Boolean |
false | 如果值为 true,则Zip文件系统提供程序将在不存在时创建新的Zip或JAR文件。 |
| encoding | String |
UTF-8 | 该值表示Zip或JAR文件中条目名称的编码方案。 |
| enablePosixFileAttributes | String 或 Boolean |
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 | String 或 Integer |
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);
-
Services
Provides