2016-04-23 67 views
2

我在加載eclipse中的資源時遇到了一些困難。在IDE中,加載工作正常。在編譯的jar裏,一切都會中斷。從Jar中的資源加載Java加載

這適用於罐的內部和外部加載圖像:

ImageIO.read(this.getClass().getResourceAsStream("E.png")) 

這僅適用於IDE的文件對象(我知道這是凌亂):

File f = new File(Thread.currentThread().getContextClassLoader().getResource("Overworld.mp3").getPath().replace("%20", " ")); 

我希望有一個文件對象File(InputStream)的構造函數,所以我可以使用第一種方法加載一個文件的圖像(目前工作完美無瑕)。但是,這並不存在。

是否有任何其他方法將文件加載到文件對象中,使其可以在IDE和編譯的jar中工作?

在此先感謝。

(獨立但又相互聯繫的問題:爲什麼File f = new File(this.getClass().getResource("Overworld.mp3").getFile());給予MEDIA_UNAVAILABLE例外,該文件是在同一個包「E.png」在我的項目的所有其他源文件)

+0

一個文件不僅僅表示數據 - 它還有一個位置,可能是一個MIME類型,可見性等。它是有道理的,你不能只從流創建一個文件,你必須指定一個位比那更多的。但似乎你不需要這些信息,那麼爲什麼你需要一個文件? –

+0

URL.getFile()*不會將URL轉換爲文件名。它只是在主機之後返回URL的一部分,所有百分比編碼(不僅僅是「%20」)。嘗試從資源URL創建文件始終是錯誤的。從URL本身讀取,或使用'getResourceAsStream'。 – VGR

回答

2

getResourceAsStream()返回java.io.InputStream你可以用來讀取jar中資源的內容作爲字節數組。

這個工作適合你嗎?

爲什麼你需要java.io.File

+0

這對我有用。我不知道爲什麼我以前沒有這樣做(可能會在文檔中過快地刪除)。 – olta8

0

另一種加載放置在類/ jar中的資源的方法。

URL url = getClass()。getClassLoader()。getResourceAsStream(filePath);