Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

java

file

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.

like image 825
Preslav Rachev Avatar asked Apr 09 '13 15:04

Preslav Rachev


2 Answers

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();
like image 197
Boris the Spider Avatar answered Oct 16 '22 19:10

Boris the Spider


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

like image 39
pkran Avatar answered Oct 16 '22 18:10

pkran