java - Files.exists(path) 为假,但 file.exists() 为真

标签 java

为什么这段代码返回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!?

最佳答案

我能够在以下特定情况下重现此内容:

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

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

所以这似乎只发生在 Windows 上。 java.iojava.nio.file 在 Windows 上实现文件权限存在性测试的方式肯定存在一些差异。

检查目录的权限。

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

关于java - Files.exists(path) 为假,但 file.exists() 为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57282130/

相关文章:

java 8u31 插件导致签名的小程序加载速度慢得多

java - 从 Java 应用程序内调用不同的 Java 应用程序

java - 我无法将 Tomcat webapp 配置为能够在 Eclipse 上进行调试

java - Kafka Connect SourceTask 的轮询间隔

java - 绝地武士池如何运作?

java - 如何更改 JavaFX 中 PathTransition 上节点的起始位置?

java - JsonMappingException jackson getOriginalMessage 为 null

Java 字符串编码 - Linux 与 Windows 不同

java - int[] arr2 = arr1.clone() 编译时不会将 RHS (Object) 转换为 (int[])。为什么 derivedObj = baseObj 允许不强制转换为 Derived(即 int[])?

java - 无法打印 bin 文件中的数据