我正在尋找使用java.nio.file.Files中的功能向任何類型的文件添加自定義元數據標記。我已經能夠正確地讀取元數據,但每當我嘗試設置元數據時都會遇到問題。使用Java nio編寫文件元數據的問題
我試圖設置自定義元數據元素使用Files.setAttribute具有以下
Path photo = Paths.get("C:\\Users\\some\\picture\\path\\2634.jpeg");
try{
BasicFileAttributes attrs = Files.readAttributes(photo, BasicFileAttributes.class);
Files.setAttribute(photo, "user:tags", "test");
String attribute = Files.getAttribute(photo, "user:tags").toString();
System.out.println(attribute);
}
catch (IOException ioex){
ioex.printStackTrace();
}
純字符串,但有以下錯誤結束:
異常線程「main」 java.lang.ClassCastException:java.lang.String中不能轉換爲java.nio.ByteBuffer中
,如果我嘗試這個字符串轉換爲字節緩衝區像這樣
Path photo = Paths.get("C:\\Users\\some\\picture\\path\\2634.jpeg");
try{
BasicFileAttributes attrs = Files.readAttributes(photo, BasicFileAttributes.class);
Files.setAttribute(photo, "user:tags", ByteBuffer.wrap(("test").getBytes("UTF-8")));
String attribute = Files.getAttribute(photo, "user:tags").toString();
System.out.println(attribute);
}
catch (IOException ioex){
ioex.printStackTrace();
}
,而不是輸出文本「測試」,它輸出的怪字符串「[B @ 14e3f41」
什麼是一個字符串轉換爲字節緩衝區,並將它是可轉換回字符串的正確方法,是否有更多的可定製的方式來修改使用java的文件的元數據?
感謝您的詳細回覆,它幫助解決了這個問題,但這是否意味着任何用戶定義的任何數據類型標籤本來可能必須首先在寫入時編碼到一個字節數組中,並解碼爲匹配類型任何時候他們的意圖被讀? – lobobabysaurus 2015-04-02 19:41:28
@PhilSimmons確實,它意味着這一點;用戶定義的屬性可以是字面上的任何內容,不僅僅是文本內容! – fge 2015-04-02 19:42:28
@PhilSimmons注意到還有另一個選項來讀/寫屬性(通過'View');這是一個更復雜一點,但 – fge 2015-04-02 19:48:50