Eclipse和runnable Jar的资源

时间:2012-10-25 16:54:45

标签: java eclipse executable-jar file-import

我有以下文件结构:

+-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指针。

我试过

  • 将文件夹添加到资源目录
  • 将文件夹添加到根目录(与src相同的层)
  • 将Config文件夹添加到资源目录

解决方案:

以前文件不在jar中,所以在使用getResorce方法之前,它可以正常工作。

3 个答案:

答案 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();