服务器: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。
谢谢。
答案 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);
询问结果,看看你是否得到了有意义/期望的属性