2013-03-06 39 views
0

我正在嘗試使用libGDX解析遊戲中的xml文件。我在下面的情況下得到FileNotFoundException。SAX - 無法在libGDX中正確解析文件路徑

在擴展DefaultHandler的類中,我有這個方法來解析xml/data.xml下的xml。如果我把這個xml文件夾放在src /目錄之外,它可以在Eclipse中工作,但是當我將它導出時,因爲文件夾「xml」沒有包含在jar中。

現在,當我把它放在src文件夾下,並將路徑指定爲「src/xml/data.xml」時,它只能在Eclipse中運行。

我怎麼能找到路徑?

public void loadXML() throws SAXException, IOException, ParserConfigurationException { 
    SAXParserFactory factory = SAXParserFactory.newInstance(); 
    SAXParser parser = factory.newSAXParser(); 

    parser.parse(Gdx.files.internal("xml/data.xml").path(), this); 
} 
+0

你導出。 jar在你的桌面上運行?(不導出到Android或GWT或其他後端?) – 2013-03-06 20:14:12

+0

是的,我正在開發桌面而不是Android。 – awonderer 2013-03-06 21:43:38

回答

0

我認爲Eclipse是打包文件到.jar文件時,它在src/目錄(見Eclipse: export to .jar AND include resource files (ANT)),所以你首先你需要切換從Gdx.files.internalGdx.files.classpath通過查找該文件中的jar類路徑。

請注意,如果您想將其保留在頂層,則應該能夠將xml/目錄標記爲「源文件夾」。

第二個問題是,存儲在.jar中的文件沒有「路徑」。這就是沒有String像「/這/是/一個/路徑/到/一個/文件」,可以代表.jar文件(所以對文件的.path()的調用將不會返回任何有用的)。不過,您可以要求獲得這樣一個文件夾的InputStreamReader。我認爲Gdx.files.classpath("xml/data.xml").reader()(或.read(1024)) 應該工作(假設有一個SAXParserparse方法,它接受Reader(或InputStream)。如果SAXParser需要一個字符串路徑,您可能需要不同的方法。

+0

我用'Gdx.files.classpath(「 xml/data.xml「).path()'並添加了xml/as源文件夾,它在Eclipse中工作,但在導出時不起作用。 Users \ Me \ Desktop \ xml \ data.xml_ – awonderer 2013-03-06 22:18:13

+0

啊..我想你是奔跑者g到問題中,在類路徑中的.jar文件中沒有「路徑」。您需要使用需要流的SAXParser API ...請參閱http://stackoverflow.com/questions/793213/getting-the-inputstream-from-a-classpath-resource-xml-file – 2013-03-07 01:32:59

+0

謝謝! 'ClassLoader.class.getResourceAsStream'工作!你能再詳細解釋一下發生了什麼嗎?您期望流的SAXParser API意味着什麼? – awonderer 2013-03-07 04:56:30