java - 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!?
解决方案
我能够在以下特定情况下重现这一点:
- 操作系统是 Windows(由路径语法暗示)
- 路径是指一个目录
- 该目录是只读的,或者用户没有“列出文件夹内容”权限。
我在 Linux (Centos 6) 上对此进行了测试,即使更改目录上的文件模式(即chmod -x /aaa/bbb/ccc
或chmod -r /aaa/bbb/ccc
)也无法重现它
所以这似乎只发生在 Windows 上。关于 Windows 上的文件权限,如何java.io
和实施存在测试之间肯定存在一些差异。java.nio.file
检查目录的权限。
这可能是一个值得报告的错误。
推荐阅读
- cmd - ERRORLEVEL 无法报告 regsvr32 的进程退出代码,为什么?
- arrays - 使用 ArrayAdapter 意味着不再使用循环?
- c++ - 我可以在 std::shared_mutex 上使用 std::shared_lock 更改数据吗?
- c++ - 何时释放函数中声明的堆栈分配变量?
- windows - Atom:包拼写检查无法加载 es-CL 的检查器
- mongodb - 从 mongodb 中的每个 x 文档的集合中获取所有文档
- c# - C#/WPF RSA 不解密文本
- html - 使用 jQuery 滚动时更新鼠标位置
- llvm - 在 KLEE Docker 上配置错误:C 编译器无法创建可执行文件
- asp.net-core - Asp.net core View Design 和 ajax in view 组件