2010-09-27 40 views
2

好的,所以這是返回null的行。我在創建FileInputStream時做了什麼錯誤?FileInputStream是否爲空?

FileInputStream fin = new FileInputStream(new File(getClass().getResource("data/levellocks.lv").toURI())); 
+2

究竟哪個部分是'null'?它不能fin,因爲'new'永遠不會返回'null'。 – 2010-09-27 21:38:31

回答

2

除非你真的需要一個文件輸入流,你行可以簡化爲:

InputStream in = getClass().getResourceAsStream("data/levellocks.lv"); 

Class.getResource()和Class.getResourceAsStream是相對於包。爲了得到相對於classpath的根目錄的文件,你可以調用的類加載器的方法:

InputStream in = getClass().getClassLoader().getResourceAsStream("data/levellocks.lv"); 

你確定該文件是在你的二進制文件夾,旁邊的.class文件?不只是在.java文件旁邊的源文件夾中?

3

可以爲空的唯一的事情有的getResource( 「數據/ levellocks.lv」),這是調用toURI調用失敗

+0

但是如果文件存在,它仍然可以爲空嗎?因爲我檢查了兩次,它是O_O – William 2010-09-27 21:39:07

+2

它不在你認爲它的區域 – AHungerArtist 2010-09-27 21:39:52

2

無論的getClass或可能的getResource返回null。其他一切都應該成功或拋出異常。

2

我其實只是處理了這個問題(我不是專家),但嘗試調試,看看構造函數試圖解析名稱。對我而言,這是全班的一攬子計劃。所以當我把文件放在預期的文件夾中時,它找到了它。

對於你來說可能會有所不同,因爲我使用的是maven。但是我把它放在src/main/resources中,它找不到它。當我在com.work.hin.terminology.match(它是該類的包)的src/main/resources中放置一個文件夾結構時,它找到了它。