此代码
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?
答案 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()
的值,以确保正在读取的路径与您期望的路径相同。