2013-03-20 25 views
0

我在加載我的java遊戲中的XML文件時遇到了麻煩。下面是該文件的位置,(在Eclipse):在Jar中解析XML文件

package explorer in the Eclipse IDE

我一直在做的研究,顯然使用XML文件中的JAR文件,我需要調用

DocumentBuilder.parse(InputStream) 

問題是,當我嘗試使用getResourceAsStream("res/xml/items.xml") 來獲取InputStream時,它總是返回null。

我怎樣才能讓它不返回null?我不想將我的res文件夾放在我的「src」文件夾中,但是在Eclipse中是否需要設置一些設置?什麼是正確的路徑字符串是什麼?謝謝!

編輯:

我的代碼:

try { 
    DocumentBuilder db = dbf.newDocumentBuilder(); 
    InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("res/xml/items.xml"); 
    dom = db.parse(is); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 

這仍然給我空。

enter image description here

+0

您需要將「res」作爲源文件夾,但這不會解決所有問題。將代碼粘貼到您嘗試調用'getResourceAsStream()'的地方。 – parsifal 2013-03-20 21:39:13

+0

@parsifal InputStream is = Item.class.getResourceAsStream(「res/xml/items.xml」); – 2013-03-20 21:53:10

+0

將來,請編輯您的原始問題並提供更多信息。評論格式不好。 – parsifal 2013-03-20 21:54:50

回答

4

因此,假設你告訴Eclipse使用「資源」作爲源文件夾,你仍然有兩個問題您查找:

Item.class.getResourceAsStream("res/xml/items.xml"); 

這是一個相對路徑,所以getResourceAsStream()將預先安裝Item.class所在的目錄(請參見docs)。

第二個問題是Eclipse會將「源」文件夾視爲您的類路徑的根目錄。所以你需要改變路徑來排除「res」。

一種選擇是使用絕對路徑:"/xml/items.xml"

一個更好的選擇是調用Thread.currentThread().getContextClassLoader().getResourceAsStream(),這將在一個獨立的應用程序在應用程序服務器正常工作,以及(和是個好習慣進入)。但是你仍然需要從你的路徑中省略「res」。

+1

現在我正在使用Thread方法,但它仍然不起作用。通過轉到properties - > java build path - > source - > add folder,將文件夾設置爲源文件夾。我要爲Thread方法使用哪條路徑? – 2013-03-20 21:58:23

+1

實際上,這兩種方法仍然給我null。我想知道如果我沒有正確地使它成爲源文件夾? – 2013-03-20 22:03:07

+0

@KeiranPaster如果你沒有得到答案,你必須不接受。 – peterh 2014-08-22 12:54:02