我在 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();
}
这仍然给我空。
最佳答案
因此,假设您告诉 Eclipse 使用“res”作为源文件夹,那么您的查找仍然存在两个问题:
Item.class.getResourceAsStream("res/xml/items.xml");
这是一个相对路径,所以 getResourceAsStream()
将在目录前面添加 Item.class
生命(参见 docs )。
第二个问题是 Eclipse 将“源”文件夹视为类路径的根。因此,您需要更改路径以排除“res”。
一种选择是使用绝对路径:"/xml/items.xml"
更好的选择是调用Thread.currentThread().getContextClassLoader().getResourceAsStream()
,它可以在应用程序服务器以及独立应用程序中正常工作(并且是一个值得养成的好习惯)。但您仍然需要从路径中省略“res”。
关于java - 解析 Jar 中的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15535153/