- 所有父级接口:
AttributeView
,FileAttributeView
此 FileAttributeView
提供文件的用户定义属性的视图作为一组名称/值对,其中属性名称由 String
表示。在访问属性时,实现可能需要根据平台或文件系统表示进行编码和解码。该值具有不透明的内容。此属性视图定义了 read
和 write
方法,用于将值读入或写入 ByteBuffer
。此 FileAttributeView
不适用于属性值的大小大于 Integer.MAX_VALUE
的情况。
用户定义的属性可能在某些实现中用于存储与安全相关的属性,因此,至少在默认提供程序的情况下,所有访问用户定义的属性的方法在安装安全管理器时都需要 RuntimePermission("accessUserDefinedAttributes")
权限。
supportsFileAttributeView
方法可用于测试特定的 FileStore
是否支持用户定义属性的存储。
在需要动态访问文件属性的情况下,getAttribute
方法可用于读取属性值。属性值作为字节数组 (byte[]) 返回。 setAttribute
方法可用于从缓冲区(就像通过调用 write
方法)或字节数组 (byte[]) 写入用户定义属性的值。
- 自从:
- 1.7
-
方法总结
-
方法详情
-
name
String name()返回此属性视图的名称。这种类型的属性视图的名称为"user"
。- 指定者:
name
在接口AttributeView
中- 返回:
- 属性视图的名称
-
list
返回包含用户定义属性名称的列表。- 返回:
- 包含文件的用户定义名称的不可修改列表
- 抛出:
IOException
- 如果发生 I/O 错误SecurityException
- 在默认提供程序的情况下,安装了安全管理器,它拒绝RuntimePermission
("accessUserDefinedAttributes")
或其checkRead
方法拒绝对文件的读取访问。
-
size
返回用户定义属性值的大小。- 参数:
name
- 属性名称- 返回:
- 属性值的大小,以字节为单位。
- 抛出:
ArithmeticException
- 如果属性的大小大于Integer.MAX_VALUE
IOException
- 如果发生 I/O 错误SecurityException
- 在默认提供程序的情况下,安装了安全管理器,它拒绝RuntimePermission
("accessUserDefinedAttributes")
或其checkRead
方法拒绝对文件的读取访问。
-
read
将用户定义属性的值读入缓冲区。此方法将属性值作为字节序列读入给定缓冲区,如果缓冲区中剩余的字节数不足以读取完整的属性值,则会失败。传输到缓冲区的字节数为
n
,其中n
是属性值的大小。序列中的第一个字节位于索引p
,最后一个字节位于索引p + n - 1
,其中p
是缓冲区的位置。返回时缓冲区的位置将等于p + n
;它的限制不会改变。使用示例:假设我们要读取一个文件的 MIME 类型,该文件存储为名称为“
user.mimetype
”的用户定义属性。UserDefinedFileAttributeView view = Files.getFileAttributeView(path, UserDefinedFileAttributeView.class); String name = "user.mimetype"; ByteBuffer buf = ByteBuffer.allocate(view.size(name)); view.read(name, buf); buf.flip(); String value = Charset.defaultCharset().decode(buf).toString();
- 参数:
name
- 属性名称dst
- 目标缓冲区- 返回:
- 读取的字节数,可能为零
- 抛出:
IllegalArgumentException
- 如果目标缓冲区是只读的IOException
- 如果发生 I/O 错误或目标缓冲区中没有足够的空间用于属性值SecurityException
- 在默认提供程序的情况下,安装了安全管理器,它拒绝RuntimePermission
("accessUserDefinedAttributes")
或其checkRead
方法拒绝对文件的读取访问。- 参见:
-
write
从缓冲区写入用户定义属性的值。此方法将给定缓冲区中的属性值作为字节序列写入。要传输的值的大小为
r
,其中r
是缓冲区中剩余的字节数,即src.remaining()
。从索引p
开始的缓冲区传输字节序列,其中p
是缓冲区的位置。返回时,缓冲区的位置将等于p + n
,其中n
是传输的字节数;它的限制不会改变。如果给定名称的属性已经存在,则替换其值。如果该属性不存在,则创建它。如果检查属性存在的测试和属性的创建相对于其他文件系统活动是原子的,则它是特定于实现的。
如果没有足够的空间来存储属性,或者属性名称或值超过实现特定的最大大小,则会抛出
IOException
。使用示例:假设我们要将文件的 MIME 类型写为用户定义的属性:
UserDefinedFileAttributeView view = Files.getFileAttributeView(path, UserDefinedFileAttributeView.class); view.write("user.mimetype", Charset.defaultCharset().encode("text/html"));
- 参数:
name
- 属性名称src
- 包含属性值的缓冲区- 返回:
- 写入的字节数,可能为零
- 抛出:
IOException
- 如果发生 I/O 错误SecurityException
- 在默认提供程序的情况下,安装了安全管理器,它拒绝RuntimePermission
("accessUserDefinedAttributes")
或其checkWrite
方法拒绝对文件的写访问。
-
delete
删除用户定义的属性。- 参数:
name
- 属性名称- 抛出:
IOException
- 如果发生 I/O 错误或属性不存在SecurityException
- 在默认提供程序的情况下,安装了安全管理器,它拒绝RuntimePermission
("accessUserDefinedAttributes")
或其checkWrite
方法拒绝对文件的写访问。
-