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

时间:2013-12-20 16:37:59

标签: 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)

1 个答案:

答案 0 :(得分:0)

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

使用Files类和newDirectoryStream方法可以获得解决方法:

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

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