【问题标题】:How to read a XML file using getResourceAsStream如何使用 getResourceAsStream 读取 XML 文件
【发布时间】:2014-01-18 03:21:15
【问题描述】:

我正在尝试在下面的类中读取 xml 配置。它在运行时正在工作。但是当我将它导出到可运行的 Jar 中时。文件没有被读取..??

 public KeyTranslator() {
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                String sPath = "res/config.xml";



     //InputStream is = (InputStream) Thread.currentThread().getContextClassLoader().getResourceAsStream(sPath);
    //InputStream is = this.getClass().getResourceAsStream((sPath);

                try {
                        DocumentBuilder builder = factory.newDocumentBuilder();
                        if (AppFrame.jar == null) {
                                this.myDoc = builder.parse( new File((AppFrame.basePath+sPath).replace('\\', '/')) );//ensure seperator is '/' as linux is picky
                        } else {
                                this.myDoc = builder.parse(AppFrame.jar.getInputStream(AppFrame.jar.getJarEntry(sPath)));
                        }
            }

我用谷歌搜索并找到了 getResourceAsStream 方法。但它似乎抛出 FileNotFoundException。& 我不知道如何在我的代码中添加 InputSream ???

所以请帮助我正确的方向:)

感谢您的帮助...

注意 我试过的方法被评论了

【问题讨论】:

  • 你把jar添加到类路径了吗?
  • 看看this,对你有帮助。

标签: java xml parsing jframe executable-jar


【解决方案1】:

但它似乎抛出 FileNotFoundException

最可能的原因是文件的路径名不正确。

您似乎使用"res/config.xml" 作为您的路径名。那是一个相对路径名,相对路径名是相对当前目录解析的;例如尝试启动 JAR 时所在的目录。

(请注意,使用“/”或“\”作为路径分隔符实际上并不重要。Java 用于打开文件的内置类可以处理任何一种形式,而与运行时平台无关......)

【讨论】:

  • 因为当前目录不同。你知道“当前目录”的真正含义吗?
  • 查看图片。编辑代码并发布。我无法得到你..请
  • 你没有回答我的问题。如果你要让它以这种方式工作,你需要了解相对路径和当前目录。另一种选择是通过类路径和Class.getResource()Class.getResourceAsStream() 访问文件。阅读 javadocs 了解更多信息。
【解决方案2】:

从类路径中读取 - 在配置路径方面非常灵活。方法如下:How to really read text file from classpath in Java

顺便说一句,为了避免替换反斜杠和斜杠以在 Win 和 Unix 上运行,请使用 File.separator。例如:"res" + File.separator + "config.xml"。你也可以使用new File("res", "config.xml")

【讨论】:

  • 它在运行时工作。但是当我将它导出到可运行的 Jar 中时。
  • 在运行 jar 时检查类路径。这是java -cp-classpath 参数。里面应该有罐子。
【解决方案3】:

Atlast 找到了如何使用getResourceAsStream。下面的行会变魔术

this.myDoc = builder.parse((getClass().getResourceAsStream("/xml/config.xml")));

感谢所有的答案.....

【讨论】:

    猜你喜欢
    • 2019-04-22
    • 2011-09-06
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    相关资源
    最近更新 更多