0

我不知道如何为所有文件类型添加自定义元数据,如 txt、doc、docx、xls、xlsx、ppt、pptx、pdf 等.

Path path = new File("C:\\Users\\a.txt").toPath();

        try{

         Files.setAttribute(path, "user:custom_attribute", "value1");
         }catch(IOException e){

            System.out.println(e.getMessage());
        }

我没有得到我要去哪里错了......我得到这个错误

     java.lang.String cannot be cast to java.nio.ByteBuffer
at sun.nio.fs.AbstractUserDefinedFileAttributeView.setAttribute(Unknown Source)
at sun.nio.fs.AbstractFileSystemProvider.setAttribute(Unknown Source)
at java.nio.file.Files.setAttribute(Unknown Source)
4

2 回答 2

0

您可以使用 UserDefinedFileAttributeView 来定义您的自定义属性:

final UserDefinedFileAttributeView view = Files.getFileAttributeView(path, UserDefinedFileAttributeView.class);
view.write("user.custom attribute", Charset.defaultCharset().encode("text/html"));
于 2013-11-12T12:20:15.050 回答
0

属性存储为字节序列,因此setAttribute需要一个字节序列。如果要存储 a String,则必须使用定义的字符集对其进行转换。

try
{
  ByteBuffer bb=StandardCharsets.UTF_8.encode("value1");
  Files.setAttribute(path, "user:custom_attribute", bb);
} catch(IOException e)
{
  System.out.println(e.getMessage());
}

再次取回值需要从字节转换为String

try
{
  byte[] b=(byte[])Files.getAttribute(path, "user:custom_attribute");
  String value=StandardCharsets.UTF_8.decode(ByteBuffer.wrap(b)).toString();
  System.out.println(value);
} catch(IOException e)
{
  System.out.println(e.getMessage());
}
于 2013-11-12T12:20:24.223 回答