首页 > 解决方案 > Files.exists(path) 为假,但 file.exists() 为真

问题描述

为什么此代码返回 false?

Path path = Paths.get("C:\\aaa\\bbb\\ccc");
Files.exists(path); // false!?

即使我从文件(存在)转换为它:

File file = new File("C:\\aaa\\bbb\\ccc");
file.exists(); // true!!!
Path path = file.toPath();
Files.exists(path); // still false!?

标签: java

解决方案


我能够在以下特定情况下重现这一点:

  1. 操作系统是 Windows(由路径语法暗示)
  2. 路径是指一个目录
  3. 该目录是只读的,或者用户没有“列出文件夹内容”权限。

我在 Linux (Centos 6) 上对此进行了测试,即使更改目录上的文件模式(即chmod -x /aaa/bbb/cccchmod -r /aaa/bbb/ccc)也无法重现它

所以这似乎只发生在 Windows 上。关于 Windows 上的文件权限,如何java.io和实施存在测试之间肯定存在一些差异。java.nio.file

检查目录的权限。

可能是一个值得报告的错误。


推荐阅读