包含 Eclipse 和可运行 Jar 的资源
Posted
技术标签:
【中文标题】包含 Eclipse 和可运行 Jar 的资源【英文标题】:Resources with Eclipse and runnable Jar 【发布时间】:2012-10-25 16:54:45 【问题描述】:我有以下文件结构:
+-src
+-- code
+-resources
+-- img
+- logo.png
+-- defaultConfig
+- config.xml
当我在 Eclipse 中运行代码时,它可以工作,因为导出到可运行的 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
指针。
我试过了
将文件夹添加到资源目录 将文件夹添加到根目录(与 src 相同的层) 将 Config 文件夹添加到资源目录解决方案:
以前文件不在 jar 中,所以在使用 getResorce
方法之前,它可以工作。
【问题讨论】:
如何读取文件 你确定所有东西都装在罐子里了吗? 我已经用 zip 打开了罐子,所有东西都装好了 【参考方案1】:为什么要创建File
对象?您的数据嵌入到 jar 文件中;没有您可以构造引用它的 File
对象(除非您在某处有自定义文件系统)。
您需要删除需要从文件中读取配置的任何内容,并改为使用任何InputStream
。然后你可以使用
InputStream stream = Foo.class.getResourceAsStream("/defaultConfig/config.xml");
【讨论】:
@MemLeak:那么您需要更改它,或者在阅读之前将资源提取到磁盘。 @DaSh:那甚至不是有效的代码,而且我们真的没有足够的信息来帮助你。我建议您提出一个新问题 - 请参阅 tinyurl.com/so-list 了解更多关于什么是好问题的信息。【参考方案2】:这应该对你有帮助 reading xml file inside a jar-package
“您无法获取 File 对象(因为它在 .jar 中后不再是文件),但您应该能够通过 getResourceAsStream(path) 将其作为流获取”
【讨论】:
【参考方案3】:如果一切都打包好了,那么您应该使用getResource
获取资源,就像获取图像一样,但路径可能不同。
URL url = getClass().getResource("/defaultConfig/config.xml");
然后你可以直接从这个 url 阅读。见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();
【讨论】:
以上是关于包含 Eclipse 和可运行 Jar 的资源的主要内容,如果未能解决你的问题,请参考以下文章