Files.isWritable的异常行为

问题描述

如果文件位于网络上(直接访问或通过映射的驱动器访问),Windows机器上的

Files.isWritable总是错误

但是:

  1. 文件具有写权限。
  2. FileUtils.writeStringToFile成功写入此文件,没有给出任何错误。 (https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#writeStringToFile-java.io.File-java.lang.String-java.lang.String-

是否有更好的API可以为网络上的文件提供更可靠的结果/权限?

解决方法

如果可以的话,我建议您升级JDK。 Files.isWritable报告了多个错误-例如this和相关错误,其中一个可能是导致您出现问题的原因。

在使用JDK11时,我注意到了类似的问题,并针对我的特殊情况添加了此临时解决方法。升级到JDK14 / 15后,我删除了解决方法:

public static boolean isWritable(Path path)
{
    boolean writable = Files.isWritable(path);
    if (!writable)
    {
        writable = path.toFile().canWrite();
    }
    return writable;
}