昨天,我遇到了一个问题,因为我无法打开位于我的.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
答案 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”),您可能需要以某种方式将其添加到构建中。