Added in [API level 26](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Methods](https://developer.android.com/reference/java/nio/file/attribute/UserDefinedFileAttributeView#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/java/nio/file/attribute/UserDefinedFileAttributeView#inhmethods)

# UserDefinedFileAttributeView


`
public


interface
UserDefinedFileAttributeView
`


`


implements

https://developer.android.com/reference/java/nio/file/attribute/FileAttributeView


`

|---|
| java.nio.file.attribute.UserDefinedFileAttributeView |

<br />

*** ** * ** ***

A file attribute view that provides a view of a file's user-defined
attributes, sometimes known as *extended attributes*. User-defined
file attributes are used to store metadata with a file that is not meaningful
to the file system. It is primarily intended for file system implementations
that support such a capability directly but may be emulated. The details of
such emulation are highly implementation specific and therefore not specified.

This `FileAttributeView` provides a view of a file's user-defined
attributes as a set of name/value pairs, where the attribute name is
represented by a `String`. An implementation may require to encode and
decode from the platform or file system representation when accessing the
attribute. The value has opaque content. This attribute view defines the
`https://developer.android.com/reference/java/nio/file/attribute/UserDefinedFileAttributeView#read(java.lang.String,%20java.nio.ByteBuffer)` and `https://developer.android.com/reference/java/nio/file/attribute/UserDefinedFileAttributeView#write(java.lang.String,%20java.nio.ByteBuffer)` methods to read the value into
or write from a `https://developer.android.com/reference/java/nio/ByteBuffer`. This `FileAttributeView` is not
intended for use where the size of an attribute value is larger than `https://developer.android.com/reference/java/lang/Integer#MAX_VALUE`.

User-defined attributes may be used in some implementations to store
security related attributes so consequently, in the case of the default
provider at least, all methods that access user-defined attributes require the
`RuntimePermission("accessUserDefinedAttributes")` permission when a
security manager is installed.

The `https://developer.android.com/reference/java/nio/file/FileStore#supportsFileAttributeView(java.lang.Class<?%20extends%20java.nio.file.attribute.FileAttributeView>)` method may be used to test if a specific `https://developer.android.com/reference/java/nio/file/FileStore` supports the storage of user-defined
attributes.

Where dynamic access to file attributes is required, the `https://developer.android.com/reference/java/nio/file/Files#getAttribute(java.nio.file.Path,%20java.lang.String,%20java.nio.file.LinkOption[])` method may be used to read
the attribute value. The attribute value is returned as a byte array (byte\[\]).
The `https://developer.android.com/reference/java/nio/file/Files#setAttribute(java.nio.file.Path,%20java.lang.String,%20java.lang.Object,%20java.nio.file.LinkOption[])` method may be used
to write the value of a user-defined attribute from a buffer (as if by
invoking the `https://developer.android.com/reference/java/nio/file/attribute/UserDefinedFileAttributeView#write(java.lang.String,%20java.nio.ByteBuffer)` method), or byte array (byte\[\]).

## Summary

| ### Public methods ||
|---|---|
| ` abstract void` | ` https://developer.android.com/reference/java/nio/file/attribute/UserDefinedFileAttributeView#delete(java.lang.String)(https://developer.android.com/reference/java/lang/String name) ` Deletes a user-defined attribute. |
| ` abstract https://developer.android.com/reference/java/util/List<https://developer.android.com/reference/java/lang/String>` | ` https://developer.android.com/reference/java/nio/file/attribute/UserDefinedFileAttributeView#list()() ` Returns a list containing the names of the user-defined attributes. |
| ` abstract https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/java/nio/file/attribute/UserDefinedFileAttributeView#name()() ` Returns the name of this attribute view. |
| ` abstract int` | ` https://developer.android.com/reference/java/nio/file/attribute/UserDefinedFileAttributeView#read(java.lang.String,%20java.nio.ByteBuffer)(https://developer.android.com/reference/java/lang/String name, https://developer.android.com/reference/java/nio/ByteBuffer dst) ` Read the value of a user-defined attribute into a buffer. |
| ` abstract int` | ` https://developer.android.com/reference/java/nio/file/attribute/UserDefinedFileAttributeView#size(java.lang.String)(https://developer.android.com/reference/java/lang/String name) ` Returns the size of the value of a user-defined attribute. |
| ` abstract int` | ` https://developer.android.com/reference/java/nio/file/attribute/UserDefinedFileAttributeView#write(java.lang.String,%20java.nio.ByteBuffer)(https://developer.android.com/reference/java/lang/String name, https://developer.android.com/reference/java/nio/ByteBuffer src) ` Writes the value of a user-defined attribute from a buffer. |

| ### Inherited methods |
|---|---|
| From interface ` https://developer.android.com/reference/java/nio/file/attribute/AttributeView ` |---|---| | ` abstract https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/java/nio/file/attribute/AttributeView#name()() ` Returns the name of the attribute view. | ||

## Public methods

### delete

Added in [API level 26](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract void delete (String name)
```

Deletes a user-defined attribute.

<br />

| Parameters ||
|---|---|
| `name` | `String`: The attribute name <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | If an I/O error occurs or the attribute does not exist |
| `https://developer.android.com/reference/java/lang/SecurityException` | In the case of the default provider, a security manager is installed, and it denies `https://developer.android.com/reference/java/lang/RuntimePermission``("accessUserDefinedAttributes")` or its `https://developer.android.com/reference/java/lang/SecurityManager#checkWrite(java.lang.String)` method denies write access to the file. |

### list

Added in [API level 26](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract List<String> list ()
```

Returns a list containing the names of the user-defined attributes.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/List<https://developer.android.com/reference/java/lang/String>` | An unmodifiable list containing the names of the file's user-defined <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | If an I/O error occurs |
| `https://developer.android.com/reference/java/lang/SecurityException` | In the case of the default provider, a security manager is installed, and it denies `https://developer.android.com/reference/java/lang/RuntimePermission``("accessUserDefinedAttributes")` or its `https://developer.android.com/reference/java/lang/SecurityManager#checkRead(java.lang.String)` method denies read access to the file. |

### name

Added in [API level 26](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract String name ()
```

Returns the name of this attribute view. Attribute views of this type
have the name `"user"`.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | the name of the attribute view <br /> |

### read

Added in [API level 26](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract int read (String name, 
                ByteBuffer dst)
```

Read the value of a user-defined attribute into a buffer.

This method reads the value of the attribute into the given buffer
as a sequence of bytes, failing if the number of bytes remaining in
the buffer is insufficient to read the complete attribute value. The
number of bytes transferred into the buffer is `n`, where `n`
is the size of the attribute value. The first byte in the sequence is at
index `p` and the last byte is at index `p + n - 1`, where
`p` is the buffer's position. Upon return the buffer's position
will be equal to `p + n`; its limit will not have changed.

**Usage Example:**
Suppose we want to read a file's MIME type that is stored as a user-defined
attribute with the name "`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();
```

<br />

<br />

| Parameters ||
|---|---|
| `name` | `String`: The attribute name <br /> |
| `dst` | `ByteBuffer`: The destination buffer <br /> |

| Returns ||
|---|---|
| `int` | The number of bytes read, possibly zero <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | If an I/O error occurs or there is insufficient space in the destination buffer for the attribute value |
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | If the destination buffer is read-only |
| `https://developer.android.com/reference/java/lang/SecurityException` | In the case of the default provider, a security manager is installed, and it denies `https://developer.android.com/reference/java/lang/RuntimePermission``("accessUserDefinedAttributes")` or its `https://developer.android.com/reference/java/lang/SecurityManager#checkRead(java.lang.String)` method denies read access to the file. |

**See also:**

- `https://developer.android.com/reference/java/nio/file/attribute/UserDefinedFileAttributeView#size(java.lang.String)`

### size

Added in [API level 26](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract int size (String name)
```

Returns the size of the value of a user-defined attribute.

<br />

| Parameters ||
|---|---|
| `name` | `String`: The attribute name <br /> |

| Returns ||
|---|---|
| `int` | The size of the attribute value, in bytes. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | If an I/O error occurs |
| `https://developer.android.com/reference/java/lang/ArithmeticException` | If the size of the attribute is larger than `https://developer.android.com/reference/java/lang/Integer#MAX_VALUE` |
| `https://developer.android.com/reference/java/lang/SecurityException` | In the case of the default provider, a security manager is installed, and it denies `https://developer.android.com/reference/java/lang/RuntimePermission``("accessUserDefinedAttributes")` or its `https://developer.android.com/reference/java/lang/SecurityManager#checkRead(java.lang.String)` method denies read access to the file. |

### write

Added in [API level 26](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract int write (String name, 
                ByteBuffer src)
```

Writes the value of a user-defined attribute from a buffer.

This method writes the value of the attribute from a given buffer as
a sequence of bytes. The size of the value to transfer is `r`,
where `r` is the number of bytes remaining in the buffer, that is
`src.remaining()`. The sequence of bytes is transferred from the
buffer starting at index `p`, where `p` is the buffer's
position. Upon return, the buffer's position will be equal to `p + n`, where `n` is the number of bytes transferred; its limit
will not have changed.

If an attribute of the given name already exists then its value is
replaced. If the attribute does not exist then it is created. If it
implementation specific if a test to check for the existence of the
attribute and the creation of attribute are atomic with respect to other
file system activities.

Where there is insufficient space to store the attribute, or the
attribute name or value exceed an implementation specific maximum size
then an `IOException` is thrown.

**Usage Example:**
Suppose we want to write a file's MIME type as a user-defined attribute:

```
   UserDefinedFileAttributeView view =
       FIles.getFileAttributeView(path, UserDefinedFileAttributeView.class);
   view.write("user.mimetype", Charset.defaultCharset().encode("text/html"));
```

<br />

<br />

| Parameters ||
|---|---|
| `name` | `String`: The attribute name <br /> |
| `src` | `ByteBuffer`: The buffer containing the attribute value <br /> |

| Returns ||
|---|---|
| `int` | The number of bytes written, possibly zero <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | If an I/O error occurs |
| `https://developer.android.com/reference/java/lang/SecurityException` | In the case of the default provider, a security manager is installed, and it denies `https://developer.android.com/reference/java/lang/RuntimePermission``("accessUserDefinedAttributes")` or its `https://developer.android.com/reference/java/lang/SecurityManager#checkWrite(java.lang.String)` method denies write access to the file. |