包含 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 的资源的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Eclipse 运行配置转换为 .bat 文件

在 Eclipse 中运行程序时,使用 Hibernate 的 Eclipse 不加载 mysql 驱动程序 jar

用于资源导出的 Maven 配置

运行jar文件失败classpath下的资源文件找不到

Eclipse:如何使用外部 jar 构建可执行 jar?

可运行的 JAR 缺少图像/文件(资源)