模块 java.base

接口 UserDefinedFileAttributeView

所有父级接口:
AttributeView , FileAttributeView

public interface UserDefinedFileAttributeView extends FileAttributeView
提供文件的用户定义属性视图的文件属性视图,有时称为 extended attributes 。用户定义的文件属性用于存储对文件系统无意义的文件的元数据。它主要用于直接支持这种功能但可以模拟的文件系统实现。这种模拟的细节是高度特定于实现的,因此没有指定。

FileAttributeView 提供文件的用户定义属性的视图作为一组名称/值对,其中属性名称由 String 表示。在访问属性时,实现可能需要根据平台或文件系统表示进行编码和解码。该值具有不透明的内容。此属性视图定义了 read write 方法,用于将值读入或写入 ByteBuffer 。此 FileAttributeView 不适用于属性值的大小大于 Integer.MAX_VALUE 的情况。

用户定义的属性可能在某些实现中用于存储与安全相关的属性,因此,至少在默认提供程序的情况下,所有访问用户定义的属性的方法在安装安全管理器时都需要 RuntimePermission("accessUserDefinedAttributes") 权限。

supportsFileAttributeView 方法可用于测试特定的 FileStore 是否支持用户定义属性的存储。

在需要动态访问文件属性的情况下,getAttribute 方法可用于读取属性值。属性值作为字节数组 (byte[]) 返回。 setAttribute 方法可用于从缓冲区(就像通过调用 write 方法)或字节数组 (byte[]) 写入用户定义属性的值。

自从:
1.7
  • 方法总结

    修饰符和类型
    方法
    描述
    void
    delete(String name)
    删除用户定义的属性。
    list()
    返回包含用户定义属性名称的列表。
    name()
    返回此属性视图的名称。
    int
    read(String name, ByteBuffer dst)
    将用户定义属性的值读入缓冲区。
    int
    size(String name)
    返回用户定义属性值的大小。
    int
    write(String name, ByteBuffer src)
    从缓冲区写入用户定义属性的值。
  • 方法详情

    • name

      String  name()
      返回此属性视图的名称。这种类型的属性视图的名称为 "user"
      指定者:
      name 在接口 AttributeView
      返回:
      属性视图的名称
    • 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 方法拒绝对文件的读取访问。
      参见:
    • 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 方法拒绝对文件的写访问。