0

服务器: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 。

谢谢 。

4

2 回答 2

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()));
}
于 2013-02-27T15:48:12.740 回答
0

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

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

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

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

或者

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

并询问结果以查看您是否获得有意义/预期的属性

于 2013-02-27T17:43:18.470 回答