我正在尝试在下面的类中读取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
所以帮助我正确的方向:)
感谢您的帮助......
注意 我试过的方法已被评论
答案 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")));
感谢所有答案......