我有以下文件结构:
+-src
+-- code
+-resources
+-- img
+- logo.png
+-- defaultConfig
+- config.xml
当我在Eclipse中运行代码时,它工作正常,因为导出到runnable jar,它没有找到defaultConfig
个文件
我正在以这种方式访问徽标并且它可以正常工作
URL url = getClass().getResource("/img/logo.png");
setIconImage(new ImageIcon(url).getImage());
访问config.xml
不适用于不同的设置。
这是给出的:
File config = new File("resources/defaultConfig/config.xml");
经过大量的搜索,我尝试了这个:
//example
String path = "resources\\defaultConfig\\config.xml");
File config = new File(createURIFromString(path));
我用./
& .\
没有.
private URI createURIFromString(String path) {
URI id = null;
try {
id = getClass().getResource(path).toURI();
} catch (Exception e) {
e.printStackTrace();
}
return id;
}
结果是null
指针。
我试过
解决方案:
以前文件不在jar中,所以在使用getResorce
方法之前,它可以正常工作。
答案 0 :(得分:3)
为什么要创建File
对象?您的数据嵌入在jar文件中;没有File
对象可以构造引用它(除非你在某个地方有自定义文件系统)。
您需要删除要求要从文件中读取的配置的任何内容,而不是让它占用任何InputStream
。然后你可以使用
InputStream stream = Foo.class.getResourceAsStream("/defaultConfig/config.xml");
答案 1 :(得分:1)
这应该对你有所帮助 reading xml file inside a jar-package
“你不能得到一个File对象(因为它不再是.jar中的文件),但是你应该能够通过getResourceAsStream(path)将它作为一个流来获取”
答案 2 :(得分:0)
如果所有内容都已打包,那么您应该获得getResource
的资源,就像获取图像一样,但可能是不同的路径。
URL url = getClass().getResource("/defaultConfig/config.xml");
然后你可以直接从这个网址阅读。见Reading Directly from a URL。
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); String inputLine; while ((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close();