java - 对网络驱动器上不可访问的 File 对象的后续调用 File.listFiles 会产生不同的结果

标签 java

我有以下内容:

File file = new File("\\\\somenetworkshare\\folder\\subfolder");
System.out.println(file.listFiles());
System.out.println(file.listFiles());
System.out.println(file.listFiles());

现在,该子文件夹是我作为用户无法访问的目录。根据 Java 6 文档 File.listFiles 应该返回 null。

我期望上述程序的结果是:

null
null
null

相反,结果是:

null
[Ljava.io.File;@6b86768e
[Ljava.io.File;@48d19bc8

事实上,似乎在第一次调用之后对 listFiles 的每次调用都会返回一个空数组。

这是 Java 中的错误吗?或者有人知道为什么存在这种行为吗?

我的 Java 版本是:

java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)

最佳答案

这绝对是一个错误,它位于 FileSystem 类的 native 代码中。

可以使用 Files 类和 newDirectoryStream 方法来解决此问题:

Path dir = Paths.get("\\\\somenetworkshare\\folder\\subfolder");
DirectoryStream<Path> dirStream = Files.newDirectoryStream(dir);

如果您无权访问该文件夹,您将得到一个正确的 java.nio.file.AccessDeniedException

关于java - 对网络驱动器上不可访问的 File 对象的后续调用 File.listFiles 会产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20708102/

相关文章:

java - 如何设置 myweb.property 的位置以便 AnnotationConfigWebApplicationContext getEnvironment 可以找到它?

java - 使用 Endless RecyclerView 作为日历

java - 将文本文件读入数组的字符串中

java - 在上下文 Tomcat 7 上启用自动部署

java - OpenJDK 11 和 macOS 不支持 ZGC?

java - 使用 ArrayList 计算文件中整数出现的次数

java - 线程对象上 getId() 的返回类型

java - 条件语句 :dead code

java - ElasticSearch 日期转换为 Java LocalDateTime 失败

java - 将方法的答案保留到小数点后两位