【问题标题】:Opening a xml file from eclipse and from a .jar file in java从 eclipse 和 java 中的 .jar 文件打开 xml 文件
【发布时间】:2013-08-09 02:08:31
【问题描述】:

昨天,我遇到了一个问题,因为我无法打开位于我的 .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 的旧代码。

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

谢谢

编辑: 谢谢大家,现在可以正常使用了 我的问题是我把我的资源文件夹放在这样的地方:

+project

  +src

  +ressources

    +emitter.xml

【问题讨论】:

    标签: java xml file jar


    【解决方案1】:
    InputStream i= this.getClass().getClassLoader().getResourceAsStream("/ressources/emitter.xml");
    

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

    我的项目

    +src
        +ressources
             emitter.xml
    

    【讨论】:

    • 非常感谢,这就是问题所在。我将资源放在 src 文件夹中,它运行良好
    • @TheriotgamesRiot 现在你有 15 个 :-)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:
        InputStream i= getClass().getClassLoader().getResourceAsStream("ressources/emitter.xml");
        

        或

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

        (注意绝对定位)

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

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

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

        【讨论】:

          猜你喜欢
          • 2017-12-16
          • 1970-01-01
          • 1970-01-01
          • 2011-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-16
          • 1970-01-01
          相关资源
          最近更新 更多