为什么这个单元测试说我的目录不存在呢?

时间:2011-03-10 22:46:18

标签: java file getfiles

此代码

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

在Tomcat webserver环境中的JUnit单元测试中运行。

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

为什么listFiles()会返回null?

2 个答案:

答案 0 :(得分:2)

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

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

更新:或者(看起来很难看)try both File constructors,正如Java-guru Kohsuke Kawaguchi建议的那样。

  

如果我们只有文件(URL)构造函数......

答案 1 :(得分:1)

根据the Javadoc for File.listFiles()

  

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

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

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

这样的东西
File f = new File(listofFiles.toURI());

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

相关问题