[写入扩展属性时出错]无法在/ tmp目录之外写入扩展属性

时间:2015-06-26 21:27:24

标签: java nio

我正在尝试将UserDefinedFileAttribute写入文件。

UserDefinedFileAttributeView view = Files.getFileAttributeView(myFile,UserDefinedFileAttributeView.class);

view.write("myattibute",Charset.defaultCharset().encode("1234");

我确保文件权限看起来是正确的。但是当这段代码在UNIX上运行时,我得到了错误

  

编写扩展属性时出错:操作不支持

但是,如果我更新/ tmp目录中的文件,它可以工作吗?

2 个答案:

答案 0 :(得分:0)

我不太确定你在寻找什么但是在Windows中这对我有用,也许对你来说也是如此:

public static boolean writeCustomMETAfile(String filepath,String name, String value) {
    boolean succes = false;
    try {
        Path file = Paths.get(filepath);
        UserDefinedFileAttributeView userView = Files.getFileAttributeView(file, UserDefinedFileAttributeView.class);
        //userView.write(name, Charset.defaultCharset().encode(value));

         final byte[] bytes = value.getBytes("UTF-8");
         final ByteBuffer writeBuffer = ByteBuffer.allocate(bytes.length);
         writeBuffer.put(bytes);
         writeBuffer.flip();

        userView.write(name, writeBuffer);
        succes = true;

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return succes;
}

使用JUnit测试:

@Test
public void B_getFileInfo(){
    String filepath = "....your.File";
    METAdao.writeCustomMETAfile(filepath,"test","true");
    String[] attribList = METAdao.readCustomMETAfile(filepath);
    String[] expected1 = {"test"};
    assertArrayEquals(expected1, attribList);
    String test = METAdao.readCustomMETAfile(filepath,"test");
    assertEquals("true", test);
    METAdao.deleteCustomMETAfile(filepath,"test");
    String[] recheck = METAdao.readCustomMETAfile(filepath);
    String[] expected2 = {};
    assertArrayEquals(expected2, recheck);
}

答案 1 :(得分:0)

您可能正在尝试将扩展属性写入不支持扩展属性的文件系统。在这种情况下,即使Java会错误地为null返回非UserDefinedFileAttributeView,导致客户端代码认为它可以正常工作。