2011-03-10 285 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)構造...

相關問題