模块  java.base

Interface UserDefinedFileAttributeView

  • All Superinterfaces:
    AttributeViewFileAttributeView

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

    FileAttributeView将文件的用户定义属性视图作为一组名称/值对提供,其中属性名称由String表示。 实现可能需要在访问属性时从平台或文件系统表示进行编码和解码。 该值具有不透明的内容。 此属性视图定义readwrite方法以将值读入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 interface AttributeView
        结果
        属性视图的名称
      • list

        List<String> list()
                   throws IOException
        返回包含用户定义属性名称的列表。
        结果
        包含文件用户定义名称的不可修改列表
        异常
        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方法拒绝对该文件的写访问权。