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