2017-07-04 148 views
1

不要標記爲複製!從jar中的絕對路徑加載Java中的資源

聽我說,所有我見過的解決方案是好的,但我不明白的類路徑是如何工作的使用加載資源時:

ClassLoader classLoader = getClass().getClassLoader() 

我想建立一個資源加載器(稱爲ResourceLoader),可以從加載任何地方的內的jar包。

所以如果裝載機放置在com.spikespaz.engine.loader.ResourceLoader,我不想被困在com.spikespaz.engine.loader的相對路徑。

我希望能夠從com.spikespaz.game.resources.texturescom.spikespaz.game.resources.models加載,而不需要將讀者放在父目錄中。

我發現這是什麼:https://stackoverflow.com/a/3862115/2512078

但是,從我的理解,所有的在他的回答這些選項必須是相對於類加載它們。 (getClass())有沒有解決方法,或者我誤解了它?

如果我誤解了它,有人可以解釋更好嗎?

任何解決方案必須相對於jar包或開發環境源的確切根,我不必將任何東西放入該根目錄。

謝謝。

回答

0

我想你誤會或誤解他的回答https://stackoverflow.com/a/3862115/2512078

無論是正常的類加載器和上下文類加載器能夠以絕對路徑來加載資源。

要使用常規類加載器執行此操作,請確保資源路徑前面有一個前導碼/,否則它會加載相對於加載它的類的包的資源。

this.getClass().getResource("/foo/bar.txt")` 

上下文類加載器永遠不會加載相對於類的資源,路徑總是被解釋爲絕對路徑。

Thread.currentThread().getContextClassLoader().getResource("foo/bar.txt") 

注:不要使用前導斜槓與上下文類加載器。

+0

如果你想知道爲什麼我沒有接受答案,它看起來不錯。一旦我有機會測試它,我會。我目前正在重寫我的代碼的其餘部分,所以它可能有點。 – spikespaz