0

这段代码

URL listofFiles = this.getClass().getResource("someDir");
File f = new File(listofFiles.toString());
File[] files = f.listFiles();

在 Tomcat 网络服务器环境中的 JUnit 单元测试中运行。

返回的 URL 绝对有效。我已经进入 OS X 中的 Finder,执行了“转到目录”,粘贴了值listofFiles并查看了目录中的所有文件。

为什么listFiles()返回null?

4

2 回答 2

2

带有 String 的 File 构造函数需要一个路径,而不是 URL(的 toString)。

使用不同的构造函数,例如new File(listofFiles.toURI()). 或者给它一个路径:new File(listofFiles.getPath()).

更新:或者(尽管看起来很丑)尝试两个 File 构造函数,正如 Java 大师 Kohsuke Kawaguchi 所建议的那样。

如果我们有 File(URL) 构造函数...

于 2011-03-10T22:54:08.167 回答
1

根据JavadocFile.listFiles()

返回: 一组抽象路径名,表示由该抽象路径名表示的目录中的文件和目录。如果目录为空,则数组将为空。如果此抽象路径名不表示目录,或者发生 I/O 错误,则返回 null。

您获得null返回值的事实表明您传递给 File 构造函数的路径不指向目录。

我怀疑将结果传递URL.toString()给 File 构造函数正在构建一个不是您认为的路径。相反,尝试类似

File f = new File(listofFiles.toURI());

此外,您可能希望记录 的值f.getAbsolutePath()以确保正在读取的路径与您期望的相同。

于 2011-03-10T22:53:49.147 回答