2013-04-09 37 views
8

是否可以在File實例上獲取和設置自定義元數據?我想使用通過我的系統處理的文件作爲某種非常簡單的數據庫,其中每個文件都應包含其他自定義元數據,例如發件人的電子郵件,某些時間戳等。是否可以使用Java在文件上設置自定義元數據?

它適用於一個內部系統,所以安全性不是問題。

+0

對於我創建了一個額外的元數據文件,每個文件類似的要求,即名爲'report.pdf'的文件具有包含元數據的'report.pdf.meta'文件。不像使用擴展屬性那樣花哨,但它工作。 – 2013-04-09 16:39:01

回答

6

在Java 7中,你可以使用Path類和UserDefinedFileAttributeView做到這一點。

這裏是從那裏採取的示例:

一個文件的MIME類型可以通過使用此代碼段被存儲爲用戶定義屬性:

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

要閱讀MIME類型屬性,則將使用此代碼段:

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(); 
+0

如果您將'UserDefinedFileAttributeView'與不支持POSIX擴展屬性(即FAT)的文件系統一起使用會發生什麼?莫名其妙地模仿? – 2013-04-09 16:29:57

+0

我無法找到一個完整的列表,[這](http://stackoverflow.com/questions/15319586/what-file-sytems-support-java-userdefinedfileattributeview)答案列出了幾個文件系統。我想唯一能找到的方法就是在FAT上嘗試一下,看看會發生什麼。 – 2013-04-09 16:32:53

1

您應經常檢查,如果文件系統支持UserDefinedFileAttributeView您要設置特定文件你可以簡單地調用此

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

從我的經驗來看,UserDefinedFileAttributeView沒有在FAT *支持和HFS +(適用於Mac)文件系統

相關問題