2011-03-10 156 views
0

此代码为什么这个单元测试说当我的目录不存在时呢?

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

运行在一个Tomcat web服务器环境一个JUnit单元测试。

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

为什么listFiles()返回null?

+1

和Yes。它是一个目录。 – bobber205 2011-03-10 22:49:20

+0

你应该检查:调用'f.exists()'和'f.isDirectory()'来确保。 – Jorn 2011-03-10 22:58:12

回答

1

根据the Javadoc for File.listFiles()

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

你得到一个null返回值的事实表明你传递给File构造函数的路径并不指向一个目录。

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

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

此外,你可能要记录的f.getAbsolutePath()值,以确保正在读取的路径是一样的,你期待什么。

+0

它看起来像我,getClass()方法返回一个错误的值,因为某些东西“不同步”。我必须半经常地重建我的项目(每天工作2到3次),之后才能正常工作。如果这有什么不同,我们正在使用Tomcat。 – bobber205 2011-03-14 22:13:00

2

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

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

更新:或者(正如看起来那样丑陋)try both File constructors,正如Java大师Kohsuke Kawaguchi所建议的那样。

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

相关问题