Preslav Rachev
Preslav Rachev

Reputation: 4003

is it possible to set custom metadata on files, using Java?

Is it possible to get and set custom metadata on File instances? I want to use the files that I process through my system as some kind of a very simple database, where every file should contain additional custom metadata, such as the email of the sender, some timestamps, etc.

It is for an internal system, so security is not an issue.

Upvotes: 9

Views: 7703

Answers (2)

pkran
pkran

Reputation: 191

You should always check if the filesystem supports UserDefinedFileAttributeView for the specific file you want to set You can simply invoke this

Files.getFileStore(Paths.get(path_to_file))).supportsFileAttributeView(UserDefinedFileAttributeView.class);

From my experience, the UserDefinedFileAttributeView is not supported in FAT* and HFS+ (for MAC) filesystems

Upvotes: 2

Boris the Spider
Boris the Spider

Reputation: 61168

In java 7 you can do this using the Path class and UserDefinedFileAttributeView.

Here is the example taken from there:

A file's MIME type can be stored as a user-defined attribute by using this code snippet:

Path file = ...;
UserDefinedFileAttributeView view = Files
    .getFileAttributeView(file, UserDefinedFileAttributeView.class);
view.write("user.mimetype",
           Charset.defaultCharset().encode("text/html");

To read the MIME type attribute, you would use this code snippet:

Path file = ...;
UserDefinedFileAttributeView view = Files
.getFileAttributeView(file,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();

Upvotes: 8

Related Questions