从eclipse和java中的.jar文件打开xml文件

时间:2013-08-07 15:43:27

标签: java xml file jar

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

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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

上述情况应该适用于两种情况(注意是/resources/...。这假设您的目录结构如下:

  

MyProject的

+src
    +ressources
         emitter.xml

答案 2 :(得分:0)

  

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

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

答案 3 :(得分:0)

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

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

(注意绝对定位)

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

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

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