我有一個jar
文件,其中包含我想分發的資源(主要是用於緩存,日誌記錄等的配置)。訪問JAR資源
我在使用這些資源的相對路徑的問題,所以我做了什麼,我在另一個計算器問題,其表示,這是一個有效的辦法已經找到:
ClassInTheSamePackageOfTheResource.class.getResourceAsStream('resource.xml');
可悲的是這並不行。
任何想法?謝謝!
PS:很明顯,我不能使用絕對路徑 ,我想避免 環境變量如果可能的話
我有一個jar
文件,其中包含我想分發的資源(主要是用於緩存,日誌記錄等的配置)。訪問JAR資源
我在使用這些資源的相對路徑的問題,所以我做了什麼,我在另一個計算器問題,其表示,這是一個有效的辦法已經找到:
ClassInTheSamePackageOfTheResource.class.getResourceAsStream('resource.xml');
可悲的是這並不行。
任何想法?謝謝!
PS:很明顯,我不能使用絕對路徑 ,我想避免 環境變量如果可能的話
確保您的資源文件夾在項目設置中列爲源文件夾。另外,確保在構建jar時將資源文件夾設置爲導出。
您可以向jar文件中添加一個.zip擴展名,然後將其打開,以確保您的資源包含在預期的位置。
我總是使用絕對路徑是這樣的:
InputStream input = this.getClass().getResourceAsStream("/image.gif");
當您使用絕對路徑,「/」是jar文件的根文件夾,而不是主機的根文件夾。
爲+1注意/是jar的根文件夾。 – Powerlord 2010-04-14 18:53:57
的確,我使用了你描述的(jar)絕對路徑方法,它的工作原理!不知道爲什麼它沒有與相關的技巧做到這一點......但足夠好就足夠了 – 2010-04-14 18:56:57
我總是通過getResourceAsStream
困擾,使這項工作。如果 「resource.xml」 是org/pablo/opus
,我認爲你想這樣的:
Name.class.getResourceAsStream("org.pablo.opus.resource.xml");
其中resource.xml發現的?如果在源代碼樹的根目錄中,嘗試用/作爲前綴。
它不在源代碼樹的根目錄下。它位於包 – 2010-04-14 18:41:11
中,因此將完全限定的名稱視爲絕對路徑,例如com.me.and.u.effects.css將作爲/com/me/and/u/effects.css進行訪問, – Seffi 2010-04-14 18:50:27
我通常存儲文件和其他資源,然後檢索它們作爲網址:
URL url = MyClass.class.getResource("/design/someResource.png");
在靜態情況下,或以其他方式:
URL url = getClass().getResource("/design/someResource.png");
從一個實例。
上面的代碼片段假定設計是jar中的頂級文件夾。一般來說,如果路徑以「/」開始,它將採用絕對路徑,否則它與班級位置是相對的。
資源文件與類文件位於同一文件夾中嗎?這是一個獨立的應用程序還是在Web服務器上運行? – kgiannakakis 2010-04-14 18:28:12
確實在同一個文件夾中。它是一個包含在Web應用程序中的jar,是的(但我認爲它應該是無關緊要的) – 2010-04-14 18:34:21
它與搜索與給定類關聯的資源的規則是由定義的類加載器實現的。因此,基於實現,您的Web應用程序的類加載器的行爲可能會稍有不同。只是一個想法。 – 2010-04-14 18:38:26