有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java文件有点问题。可写

服务器: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) 个答案

  1. # 1 楼答案

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

    在实际由不同操作系统托管的文件系统上执行文件操作时,大多数情况下都是这样——低级别的文件属性并不总是向客户端公开

    如果您执行了new File(<your file>).exists(),它几乎肯定会返回true,因此要确定您看到的原因是否确实与属性相关,您可以尝试以下两种方法之一:

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

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

    并询问结果,看看是否返回了有意义的/预期的属性

  2. # 2 楼答案

    如果检查时"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()));
    }