【问题标题】:How to read external xml file from jar如何从jar中读取外部xml文件
【发布时间】:2011-04-09 18:39:55
【问题描述】:

我需要在 jar 可执行文件中从我的 java 应用程序中读取一个外部 XML 文件。
如果我从控制台(java -jar package.jar)午餐它工作正常,但如果我通过双击午餐它(Java 平台 SE 二进制)它不起作用。
我对相对路径有这个问题。 使用绝对路径,它可以双向工作。

【问题讨论】:

    标签: java jar executable-jar


    【解决方案1】:

    您需要将 XML 磁贴的(JAR 相对)路径添加到 MANIFEST.MF 文件中的 Class-Path 条目。此条目包含有关 JAR 的运行时类路径的信息。假设您希望将 XML 与 JAR 文件本身放在同一文件夹中,则以下内容就足够了:

    Class-Path: .
    

    (别忘了在MANIFEST.MF 文件的末尾添加一个空行)

    然后您可以使用Class#getResource()ClassLoader#getResource() 将其作为类路径资源获取。在您的情况下,第一个就足够了。

    URL xmlResource = getClass().getResource("/filename.xml");
    File xmlFile = new File(xmlResource.getPath());
    // ...
    

    【讨论】:

      【解决方案2】:

      将该文件添加到 JAR 清单中的类路径中,并将其作为输入流读取。

      【讨论】:

      • 我已经读过了 (db.parse(new File(filePath))),但是我需要编辑,所以我不能将它包含到 jar 文件中。
      • 不,不是 FilePath——它脆弱且容易出错。 getResourceAsStream() 是正确的阅读方式。编辑和写作是另一回事。
      【解决方案3】:

      【讨论】:

        【解决方案4】:
        (new File(".")).getAbsolutePath();
        

        应该给你jar路径。打印出来仔细检查,然后在上面建立你的相对路径。

        【讨论】:

        • 这将返回当前工作目录,而不是jar文件的路径。
        【解决方案5】:

        如果不知道您运行的是什么操作系统,很难给出准确的答案。

        一般的答案是修改您的启动器(桌面上的图标),以指定初始工作目录与您从 shell 运行命令时使用的目录相同。

        【讨论】:

          猜你喜欢
          • 2012-12-25
          • 2012-10-28
          • 2013-12-08
          • 1970-01-01
          • 2014-06-05
          • 2012-11-11
          • 2015-11-30
          • 2015-12-23
          相关资源
          最近更新 更多