如何使用getResourceAsStream读取XML文件

时间:2014-01-18 03:21:15

标签: java xml parsing jframe executable-jar

我正在尝试在下面的类中读取xml配置。运行时它正在工作。但是当我将它导出到Runnable 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)));
                        }
            }
我用google搜索&找到了getResourceAsStream方法。但它似乎抛出FileNotFoundException。&我不知道如何在我的代码中添加InputSream

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

感谢您的帮助......

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

3 个答案:

答案 0 :(得分:0)

  

但它似乎抛出了FileNotFoundException

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

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

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

答案 1 :(得分:0)

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

要避免在Win和Unix上使用File.separator替换反斜杠和斜杠。例如:"res" + File.separator + "config.xml"。您也可以使用new File("res", "config.xml")

答案 2 :(得分:0)

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

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

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