我有一個項目A,它包含一些java文件和一個類路徑資源R.txt。在項目中,我使用ClassLoader.getSystemResource(「R.txt」);檢索R.txt。jar中的類路徑資源
然後我有一個項目B,其中包括項目A的jar文件。現在getSystemResource(「R.txt」)不會找到文本文件(是的,它仍然在jar文件的根目錄中)。即使嘗試在其他網站上建議的「/R.txt」也無效。有任何想法嗎?
我有一個項目A,它包含一些java文件和一個類路徑資源R.txt。在項目中,我使用ClassLoader.getSystemResource(「R.txt」);檢索R.txt。jar中的類路徑資源
然後我有一個項目B,其中包括項目A的jar文件。現在getSystemResource(「R.txt」)不會找到文本文件(是的,它仍然在jar文件的根目錄中)。即使嘗試在其他網站上建議的「/R.txt」也無效。有任何想法嗎?
使用getResource
而不是getSystemResource
來使用特定於給定類加載器的資源而不是系統。調用Class.getResource
代替ClassLoader.getResource
時
URL resource = getClass().getClassLoader().getResource("R.txt");
URL resource = Foo.class.getClassLoader().getResource("R.txt");
URL resource = getClass().getResource("/R.txt");
URL resource = Foo.class.getResource("/R.txt");
注意的斜線;:例如,嘗試以下任一Class.getResource
是相對於包含該類的包,除非您有一個前導斜槓,而ClassLoader.getResource
始終是絕對的。
顯然你的JAR沒有被系統加載器加載,所以getSystemResource()
不能工作。這應該工作:
ClassFromProjectA.class.getClassLoader().getResource("R.txt")
IMO更方便是把同一個包內資源使用它們的類,這樣你就可以使用更短的
ClassFromProjectA.class.getResource("R.txt")
(或者,該類裏面只是getClass().getResource("R.txt")
)
令人驚歎。這完全解決了我的問題。感謝您的超快速輸入 // Johan – 2009-12-14 10:58:11
還有一個相關問題:我們可能從這個URL資源中獲取InputStream,但是我們怎麼才能從返回的URL對象中創建一個** File **對象。我試圖用「URLObject.toURI()」創建一個** URI **對象,並且使用這個URI對象來創建一個文件,不幸的是,它會拋出一個「URI不是等級異常」。你能給我一些幫助嗎?非常感謝 。 – 2012-08-11 21:39:15
@EnsomHodder:恩,不知道 - 但不是所有的資源*都是*文件 - 尤其是,如果它在一個jar文件中,它不會。 – 2012-08-11 22:25:17