我在java游戏中加载XML文件时遇到了麻烦。这是文件所在的位置(来自Eclipse):
我一直在做研究,显然要在JAR文件中使用xml文件,我需要调用
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();
}
这仍然让我无效。
答案 0 :(得分:4)
因此,假设您告诉Eclipse使用“res”作为源文件夹,您的查找仍有两个问题:
Item.class.getResourceAsStream("res/xml/items.xml");
这是一个相对路径,因此getResourceAsStream()
会在Item.class
所在的目录前面添加(请参阅docs)。
第二个问题是Eclipse将“source”文件夹视为类路径的根。因此,您需要更改路径以排除“res”。
一种选择是使用绝对路径:"/xml/items.xml"
更好的选择是调用Thread.currentThread().getContextClassLoader().getResourceAsStream()
,它可以在app-server和自包含的应用程序中正常工作(并且是一个很好的习惯)。但是你仍然需要从你的路径中省略“res”。