模块 jdk.zipfs
模块jdk.zipfs
提供 Zip 文件系统提供程序的实现。 Zip 文件系统提供程序将 Zip 或 JAR 文件的内容视为文件系统。
访问 Zip 文件系统
FileSystemsnewFileSystem
静态工厂方法可用于:
- 创建 Zip 文件系统
- 打开现有文件作为 Zip 文件系统
用于识别 Zip 文件系统的 URI 方案
标识 ZIP 文件系统的 URIscheme
是 jar
。
POSIX 文件属性
Zip 文件系统支持名为“zip
”的文件属性view
,它定义了以下文件属性:
“权限”属性是为 Zip 文件中的条目选择性存储的一组访问权限。对于没有访问权限的条目,该属性的值为
Name Type permissions Set
<PosixFilePermission
>
null
。 Zip 文件系统不强制执行访问权限。
可以使用 Files.getAttribute 和 Files.setAttribute 方法读取和设置“权限”属性。以下示例使用这些方法来读取和设置属性:
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
”)。此视图扩展了“basic
”视图,具有对 owner
、group-owner
和 permissions
属性的类型安全访问。 “posix
”视图仅在 Zip 文件系统创建时提供程序属性“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 文件的组所有者(或不支持组所有者的平台上的文件所有者)。
“permissions
”属性在“posix
”视图中不是可选的,因此一组默认权限用于没有存储在 Zip 文件中的访问权限的条目。默认权限集是
defaultPermissions
”属性配置默认权限。
Zip 文件系统属性
创建 Zip 文件系统时可以指定以下属性:属性名称 | 数据类型 | 默认值 | Description |
---|---|---|---|
create | String 或 Boolean |
false | 如果值为 true ,Zip 文件系统提供程序会创建一个新的 Zip 或 JAR 文件(如果它不存在)。 |
编码 | String |
UTF-8 | 该值指示 Zip 或 JAR 文件中条目名称的编码方案。 |
enablePosixFileAttributes | String 或 Boolean |
false | 如果值为 true ,Zip 文件系统将支持 PosixFileAttributeView 。 |
defaultOwner | UserPrincipal 或者 String |
null/unset | 重写 Zip 文件系统中条目的默认所有者。 该值可以是 UserPrincipal 或用作 UserPrincipal 名称的字符串值。 |
defaultGroup | GroupPrincipal 或者 String |
null/unset | 覆盖 Zip 文件系统中条目的默认组。 该值可以是 GroupPrincipal 或用作 GroupPrincipal 名称的字符串值。 |
defaultPermissions | Set <PosixFilePermission >或者 String |
null/unset | 重写 Zip 文件系统中条目的默认权限集。 该值可以是 Set <PosixFilePermission > 或由 PosixFilePermissions::fromString 解析的字符串 |
compressionMethod | String |
"DEFLATED" | 表示将条目写入 Zip 文件系统时使用的压缩方法的值。
|
releaseVersion | String 或 Integer |
null/unset | 表示访问 多版本 JAR 时要使用的版本条目的值。如果 JAR 不是 多版本 JAR ,该值将被忽略并且 JAR 将被视为未版本化。 该值必须是字符串“runtime”或代表有效的 Java SE 平台版本号 ,例如
|
示例:
构造一个由 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);
-
服务