2

昨天,我遇到了一个问题,因为我无法打开位于我的 .jar 文件的 ressources 文件夹中的 xml 文件(它会给我一个 FileNotFoundException),我设法使用以下代码行在 eclipse 上打开了该文件。你可以在这里看到我的老问题。这是我的问题代码:

File xmlFile = new File("ressources/emitter.xml");
ConfigurableEmitter emitter = ParticleIO.loadEmitter(xmlFile);

有人告诉我,一种方法是使用 getClassLoader().getRessourceAsStream 方法在导出的 .jar 文件中打开 xml 文件

InputStream i= this.getClass().getClassLoader().getResourceAsStream("ressources/emitter.xml");
ConfigurableEmitter emitter = ParticleIO.loadEmitter(i);

不幸的是,该解决方案仅在我将项目导出到 .jar 文件时才有效,因此如果我想回去调试我的程序,我必须采用仅适用于 Eclipse 的旧代码。

我的问题是:如果我想导出它或者我想调试它,有没有更好的方法来做到这一点而无需更改我的代码?

谢谢

编辑:谢谢大家,现在我的问题是我的 ressources 文件夹是这样的:

+project

  +src

  +ressources

    +emitter.xml
4

4 回答 4

1

将文件放在源文件旁边,然后在这两种情况下都可以使用 getResourceAsStream() 方法。不要忘记更新路径(它应该是你的类的包名,但用斜线而不是点)。

于 2013-08-07T15:47:07.297 回答
1
InputStream i= this.getClass().getClassLoader().getResourceAsStream("/ressources/emitter.xml");

以上应该在这两种情况下都有效(注意是/resources/...。这是假设你的目录结构如下:

我的项目

+src
    +ressources
         emitter.xml
于 2013-08-07T15:48:05.190 回答
0
InputStream i= getClass().getClassLoader().getResourceAsStream("ressources/emitter.xml");

或者

InputStream i= getClass().getResourceAsStream("/ressources/emitter.xml");

(注意绝对定位)

当类在同一个 jar 中,在同一个类路径上时,两者都可以工作。

在 jar 中,名称必须区分大小写,但由于 jar 已经可以使用。确保 ressources 目录也在类路径上,或者复制到目标目录。

由于“资源”可能是您自己配置的(不像英文那样命名为“资源”),您可能需要以某种方式将其添加到构建中。

于 2013-08-07T15:50:12.143 回答
0

我的问题是:如果我想导出它或者我想调试它,有没有更好的方法来做到这一点而无需更改我的代码?

是的,使用 Maven。Maven 会处理这个问题,它可以很好地连接到 Eclipse(NetBeans 也是!)你所做的就是将资源放在 src/main/resources 中,然后你可以让 Eclipse 运行 Maven 项目的测试目标,或者你可以mvn test从命令运行线。在这里使用 Maven 的另一个优点是,您还可以拥有 src/test/resources/emitter.xml,它使用特定于环境的测试指令覆盖 src/main 中的那个,它不会影响您的部署。

于 2013-08-07T15:48:03.460 回答