Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从eclipse和java中的.jar文件打开xml文件_Java_Xml_File_Jar - Fatal编程技术网

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

从eclipse和java中的.jar文件打开xml文件,java,xml,file,jar,Java,Xml,File,Jar,昨天,我遇到了一个问题,因为我无法打开位于.jar文件的Resources文件夹中的xml文件(它会给我一个FileNotFoundException),我使用以下代码行在eclipse上打开了该文件。你可以看到我的老毛病。这是我处理问题的代码: File xmlFile = new File("ressources/emitter.xml"); ConfigurableEmitter emitter = ParticleIO.loadEmitter(xmlFile); 有人告诉我一种方法是使

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

File xmlFile = new File("ressources/emitter.xml");
ConfigurableEmitter emitter = ParticleIO.loadEmitter(xmlFile);
有人告诉我一种方法是使用getClassLoader().GetResourceAstream方法在导出的.jar文件中打开xml文件

InputStream i= this.getClass().getClassLoader().getResourceAsStream("ressources/emitter.xml");
ConfigurableEmitter emitter = ParticleIO.loadEmitter(i);
不幸的是,只有当我将项目导出到一个.jar文件中时,该解决方案才起作用,因此如果我想回去调试我的程序,我必须使用只在eclipse上起作用的旧代码

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

多谢各位

编辑: 谢谢大家,现在一切都很好 我的问题是我把我的Resources文件夹放在下面:

+project

  +src

  +ressources

    +emitter.xml

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

我的问题是:有没有更好的方法不必这样做 如果要导出代码或调试代码,请更改代码

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

InputStream i= this.getClass().getClassLoader().getResourceAsStream("/ressources/emitter.xml");
以上两种情况都适用(注意is
/resources/..
。假设您的目录结构如下:

我的项目

+src
    +ressources
         emitter.xml

(注意绝对位置)

当类位于同一个jar中,在同一个类路径上时,这两种方法都可以工作

在jar中,名称必须区分大小写,但因为jar已经工作了。请确保ressources目录也在类路径上,或者复制到目标目录


由于“resources”可能是您自己配置的(英文中没有“resources”),因此您可能需要以某种方式将其添加到构建中。

非常感谢,这就是问题所在。我将我的resources放在src文件夹中,它起到了作用perfectly@TheriotgamesRiot现在您有15:-)
InputStream i= getClass().getClassLoader().getResourceAsStream("ressources/emitter.xml");
InputStream i= getClass().getResourceAsStream("/ressources/emitter.xml");