-
- All Superinterfaces:
-
AttributeView
,FileAttributeView
public interface UserDefinedFileAttributeView extends FileAttributeView
文件属性视图,提供文件用户定义属性的视图,有时称为扩展属性 。 用户定义的文件属性用于存储元数据,其中包含对文件系统无意义的文件。 它主要用于直接支持此类功能但可以模拟的文件系统实现。 这种仿真的细节是高度特定于实现的,因此未指定。FileAttributeView
将文件的用户定义属性视图作为一组名称/值对提供,其中属性名称由String
表示。 实现可能需要在访问属性时从平台或文件系统表示进行编码和解码。 该值具有不透明的内容。 此属性视图定义read
和write
方法以将值读入ByteBuffer
或从ByteBuffer
写入。FileAttributeView
不适用于属性值大于Integer.MAX_VALUE
的情况 。在一些实现中可以使用用户定义的属性来存储安全相关属性,因此,至少在默认提供者的情况下,访问用户定义属性的所有方法在安装安全管理器时都需要
RuntimePermission("accessUserDefinedAttributes")
权限。supportsFileAttributeView
方法可用于测试特定FileStore
是否支持存储用户定义的属性。在需要动态访问文件属性的情况下,可以使用
getAttribute
方法读取属性值。 属性值作为字节数组(byte [])返回。setAttribute
方法可用于从缓冲区(如通过调用write
方法)或字节数组(byte [])写入用户定义属性的值。- 从以下版本开始:
- 1.7
-
-
方法详细信息
-
name
String name()
返回此属性视图的名称。 此类型的属性视图的名称为"user"
。- Specified by:
-
name
in interfaceAttributeView
- 结果
- 属性视图的名称
-
list
List<String> list() throws IOException
返回包含用户定义属性名称的列表。- 结果
- 包含文件用户定义名称的不可修改列表
- 异常
-
IOException
- 如果发生I / O错误 -
SecurityException
- 对于默认提供程序,安装了安全管理器,它拒绝RuntimePermission
("accessUserDefinedAttributes")
或其checkRead
方法拒绝对该文件的读访问权。
-
size
int size(String name) throws IOException
返回用户定义属性值的大小。- 参数
-
name
- 属性名称 - 结果
- 属性值的大小(以字节为单位)。
- 异常
-
ArithmeticException
- 如果属性的大小大于Integer.MAX_VALUE
-
IOException
- 如果发生I / O错误 -
SecurityException
- 对于默认提供程序,安装了安全管理器,它拒绝RuntimePermission
("accessUserDefinedAttributes")
或其checkRead
方法拒绝对该文件的读访问权。
-
read
int read(String name, ByteBuffer dst) throws IOException
将用户定义属性的值读入缓冲区。此方法将属性的值作为字节序列读取到给定缓冲区中,如果缓冲区中剩余的字节数不足以读取完整的属性值,则会失败。 传输到缓冲区的字节数为
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
方法拒绝对该文件的读访问权。 - 另请参见:
-
size(java.lang.String)
-
write
int write(String name, ByteBuffer src) throws IOException
从缓冲区写入用户定义属性的值。此方法将给定缓冲区中的属性值写为字节序列。 要传输的值的大小为
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
void delete(String name) throws IOException
删除用户定义的属性。- 参数
-
name
- 属性名称 - 异常
-
IOException
- 如果发生I / O错误或该属性不存在 -
SecurityException
- 对于默认提供程序,安装了安全管理器,它拒绝RuntimePermission
("accessUserDefinedAttributes")
或其checkWrite
方法拒绝对该文件的写访问权。
-
-