2013-03-06 38 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