我有以下内容:
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/