实现 POSIX 系列标准的操作系统通常使用具有文件 owner、group-owner 和相关 access permissions 的文件系统。此文件属性视图提供对这些属性的读写访问。
readAttributes
方法用于读取文件的属性。文件 owner
由 UserPrincipal
表示,这是文件所有者的身份,用于访问控制。 group-owner
由 GroupPrincipal
表示,是组所有者的身份,其中组是为管理目的而创建的身份,以确定组成员的访问权限。
permissions
属性是一组访问权限。此文件属性视图提供对 PosixFilePermission
类定义的九个权限位的访问。这九个权限位决定了文件所有者、组和其他人(其他人指除所有者和组成员以外的身份)的 read 、 write 和 execute 访问权限。某些操作系统和文件系统可能会提供额外的权限位,但在本版本中此类未定义对这些其他位的访问。
使用示例:假设我们需要打印出文件的所有者和访问权限:
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
定义,此外还支持以下属性:
Name Type "permissions" Set
<PosixFilePermission
>“团体” GroupPrincipal
getAttribute
方法可用于读取任何这些属性,或任何由 BasicFileAttributeView
定义的属性,就像调用 readAttributes()
方法一样。
setAttribute
方法可用于更新文件的上次修改时间、上次访问时间或创建由 BasicFileAttributeView
定义的时间属性。它还可以用于更新权限、所有者或组所有者,就像分别调用 setPermissions
、 setOwner
和 setGroup
方法一样。
设置初始权限
支持此属性视图的实现也可能支持在创建文件或目录时设置初始权限。初始权限提供给 createFile
或 createDirectory
方法作为 FileAttribute
和 name
"posix:permissions"
和 value
是一组权限。以下示例在创建文件时使用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
-
方法总结
修饰符和类型方法描述name()
返回属性视图的名称。读取基本文件属性作为批量操作。void
setGroup
(GroupPrincipal group) 更新文件组所有者。void
setPermissions
(Set<PosixFilePermission> perms) 更新文件权限。在接口 java.nio.file.attribute.BasicFileAttributeView 中声明的方法
setTimes
在接口 java.nio.file.attribute.FileOwnerAttributeView 中声明的方法
getOwner, setOwner
-
方法详情
-
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
方法拒绝对文件的写访问。
-