实现 POSIX 系列标准的操作系统通常使用具有文件 所有者、组所有者和相关 访问权限的文件系统。此文件属性视图提供对这些属性的读取和写入访问。
使用 readAttributes
方法来读取文件的属性。文件的 owner
由一个 UserPrincipal
表示,用于访问控制的文件所有者的身份。 group-owner
,由一个 GroupPrincipal
表示,是组所有者的身份,其中组是为了行政目的而创建的身份,以确定组成员的访问权限。
permissions
属性是一组访问权限。此文件属性视图提供对 PosixFilePermission
类定义的九个权限位的访问。这九个权限位确定了文件所有者、组和其他人(其他人指的是所有者和组成员之外的身份)的 读取、写入 和 执行 访问。一些操作系统和文件系统可能提供额外的权限位,但在此版本中,此类未定义对这些其他位的访问。
使用示例: 假设我们需要打印文件的所有者和访问权限:
Path file = ...
PosixFileAttributes attrs = Files.getFileAttributeView(file, PosixFileAttributeView.class)
.readAttributes();
System.out.format("%s %s%n",
attrs.owner().getName(),
PosixFilePermissions.toString(attrs.permissions()));
动态访问
当需要动态访问文件属性时,此属性视图支持的属性如 BasicFileAttributeView
和 FileOwnerAttributeView
中定义的属性,以及以下属性:
名称 类型 "permissions" Set
<PosixFilePermission
>"group" GroupPrincipal
可以使用 getAttribute
方法来读取这些属性中的任何一个,或者读取 BasicFileAttributeView
中定义的任何属性,就像调用 readAttributes()
方法一样。
可以使用 setAttribute
方法来更新文件的最后修改时间、最后访问时间或创建时间属性,如 BasicFileAttributeView
中定义的。也可以使用该方法来更新权限、所有者或组所有者,就像调用 setPermissions
、setOwner
和 setGroup
方法一样。
设置初始权限
支持此属性视图的实现还可以在创建文件或目录时支持设置初始权限。初始权限作为一个带有 FileAttribute
,其中 name
为 "posix:permissions"
,value
为权限集合,提供给 createFile
或 createDirectory
方法。以下示例使用 asFileAttribute
方法在创建文件时构造一个 FileAttribute
:
Path path = ...
Set<PosixFilePermission> perms =
EnumSet.of(OWNER_READ, OWNER_WRITE, OWNER_EXECUTE, GROUP_READ);
Files.createFile(path, PosixFilePermissions.asFileAttribute(perms));
当在文件创建时设置访问权限时,实际权限值可能与属性对象的值不同。造成这种情况的原因是特定于实现的。例如,在 UNIX 系统上,进程具有影响新创建文件的权限位的 umask。如果实现支持设置访问权限,并且底层文件系统支持访问权限,则要求实际访问权限的值将等于或小于提供给 createFile
或 createDirectory
方法的属性的值。换句话说,文件可能比请求的更安全。
- 自版本:
- 1.7
-
Method Summary
Modifier and TypeMethodDescriptionname()
返回属性视图的名称。作为批量操作读取基本文件属性。void
setGroup
(GroupPrincipal group) 更新文件组所有者。void
setPermissions
(Set<PosixFilePermission> perms) 更新文件权限。Methods declared in interface java.nio.file.attribute.BasicFileAttributeView
setTimes
Methods declared in interface java.nio.file.attribute.FileOwnerAttributeView
getOwner, setOwner
-
Method Details
-
name
String name()返回属性视图的名称。此类型的属性视图的名称为"posix"
。- 指定者:
-
name
在接口AttributeView
中 - 指定者:
-
name
在接口BasicFileAttributeView
中 - 指定者:
-
name
在接口FileOwnerAttributeView
中 - 返回:
- 属性视图的名称
-
readAttributes
从接口复制的描述:BasicFileAttributeView
作为批量操作读取基本文件属性。具体实现是否将所有文件属性作为原子操作读取,与其他文件系统操作有关。
- 指定者:
-
readAttributes
在接口BasicFileAttributeView
中 - 返回:
- 文件属性
- 抛出:
-
IOException
- 如果发生 I/O 错误 -
SecurityException
- 在默认提供程序的情况下,安装了安全管理器,并且拒绝RuntimePermission
("accessUserInformation")
或其checkRead
方法拒绝对文件的读取访问。
-
setPermissions
更新文件权限。- 参数:
-
perms
- 新的权限集 - 抛出:
-
ClassCastException
- 如果集合包含非PosixFilePermission
类型的元素 -
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,安装了安全管理器,并且它拒绝RuntimePermission
("accessUserInformation")
或其checkWrite
方法拒绝对文件的写访问。
-
setGroup
更新文件的组所有者。- 参数:
-
group
- 新的文件组所有者 - 抛出:
-
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,安装了安全管理器,并且它拒绝RuntimePermission
("accessUserInformation")
或其checkWrite
方法拒绝对文件的写访问。
-