Files.isWritable有些不对劲

时间:2013-02-27 14:13:29

标签: java io

服务器:192.168.0.18/share是一个samba服务器,所有可以写入路径

Files.write(Paths.get(URI.create("file://192.168.0.18/share/aa/aaaa")), "asd34234asdasd".getBytes(), StandardOpenOption.CREATE,StandardOpenOption.APPEND);


System.out.println(Files.isWritable(Paths.get(URI.create("file://192.168.0.18/share/aa/aaaa"))));

我发现第一行确实创建了一个文件添加附加文本。

但第二行返回false。

我不知道为什么。

我尝试JDK7_u5& u13。

谢谢。

2 个答案:

答案 0 :(得分:0)

如果检查时"file://192.168.0.18/share/aa/aaaa"不存在,则应测试(现有)目录"file://192.168.0.18/share/aa/"上的可写标志,如下所示:

Path target=Paths.get(URI.create("file://192.168.0.18/share/aa/aaaa");
if (Files.exists(target)){  // check existing file
    System.out.println(Files.isWritable(target));
}else{ // check directory
    System.out.println(Files.isWritable(target.getParent()));
}

答案 1 :(得分:0)

写入共享时,文件属性并不总是可用,因此代码告诉您的是它无法确定文件是否可读。

在对不同操作系统实际托管的文件系统进行文件操作时,很多时候都是如此 - 低级文件属性并不总是暴露给客户端。

如果你new File(<your file>).exists(),它几​​乎肯定会返回true,所以要确定你所看到的原因是否与属性有关,你可以尝试:

DosFileAttributes attr =Files.readAttributes(<your file>, DosFileAttributes.class);

PosixFileAttributes attr = Files.readAttributes(<your file>, PosixFileAttributes.class);

询问结果,看看你是否得到了有意义/期望的属性