0

我有以下文件结构:

+-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方法之前,它可以工作。

4

3 回答 3

3

你为什么要创建一个File对象?您的数据嵌入到 jar 文件中;没有File可以构造的对象引用它(除非您在某处有自定义文件系统)。

您需要删除需要从文件中读取配置的任何内容,而是使其采用任何InputStream. 然后你可以使用

InputStream stream = Foo.class.getResourceAsStream("/defaultConfig/config.xml");
于 2012-10-25T16:59:28.853 回答
1

这应该可以帮助您 读取 jar 包中的 xml 文件

“您无法获取 File 对象(因为它在 .jar 中后不再是文件),但您应该能够通过 getResourceAsStream(path) 将其作为流获取”

于 2012-10-25T16:59:51.587 回答
0

如果一切都打包好了,那么您应该以与getResource获取图像相同的方式获取资源,但路径可能不同。

URL url = getClass().getResource("/defaultConfig/config.xml");

然后你可以直接从这个 url 阅读。请参阅直接从 URL 读取

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

String inputLine;
while ((inputLine = in.readLine()) != null)
    System.out.println(inputLine);
in.close();
于 2012-10-25T17:25:56.090 回答