【问题标题】:Parse XML File within Jar在 Jar 中解析 XML 文件
【发布时间】:2013-03-20 21:32:49
【问题描述】:

我在我的 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();
}

这仍然给我 null。

【问题讨论】:

  • 您需要将“res”设为源文件夹,但这并不能解决您的所有问题。将代码粘贴到您尝试调用 getResourceAsStream() 的位置。
  • @parsifal InputStream is = Item.class.getResourceAsStream("res/xml/items.xml");
  • 以后,请使用附加信息编辑您的原始问题。评论格式不正确。
  • @parsifal 我编辑了有问题的原始帖子。它仍然不起作用!我尝试将测试文档放入“src”文件夹,然后它可以工作,但是如果我将“res”文件夹设为源文件夹,它永远不会工作......
  • 对不起,我给出了快速的答案,没有完整的解释。当您将文件夹创建为 Eclipse 源文件夹时,该文件夹将添加到类路径的根目录中。因此,您无需在任何路径中指定文件夹名称。既然你接受了我的回答,我会假设你已经明白了。无论如何,我都会编辑我的回复,因为它具有误导性。

标签: java xml resources null slick2d


【解决方案1】:

所以,假设您告诉 Eclipse 使用“res”作为源文件夹,您的查找仍有两个问题:

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

这是一个相对路径,因此getResourceAsStream() 将添加Item.class 所在的目录(请参阅docs)。

第二个问题是 Eclipse 将“源”文件夹视为类路径的根。所以你需要更改路径以排除“res”。

一种选择是使用绝对路径:"/xml/items.xml"

更好的选择是调用Thread.currentThread().getContextClassLoader().getResourceAsStream(),它可以在应用服务器和独立应用程序中正常工作(这是一个很好的习惯)。但是您仍然需要在路径中省略“res”。

【讨论】:

  • 现在我用的是Thread方法,但是还是不行。我通过转到属性-> java 构建路径-> 源-> 添加文件夹将文件夹设置为源文件夹。 Thread 方法使用哪个路径?
  • 实际上,这两种方法仍然给我 null。我想知道我是否没有正确地将其作为源文件夹?
  • @KeiranPaster 如果你没有得到答案,你必须不接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 2017-12-22
  • 2016-11-17
  • 2011-03-06
  • 2013-07-17
  • 2013-01-10
  • 1970-01-01
相关资源
最近更新 更多