【问题标题】:Load files External To The Distribution Jar将文件加载到分发 Jar 外部
【发布时间】:2012-02-04 16:53:30
【问题描述】:

我编写了一个 Java 程序,我从一个 JAR 文件打包并运行它。我需要一些用户可更改的配置文件,它们只是以下文本行:

键=值

格式。为了加载这些文件,我使用了here 描述的类。当我通过 Netbeans IDE 运行我的程序时,一切正常,因为我在项目属性中包含了存储配置文件的目录。

当我将应用程序构建到 JAR 文件中时,问题就出现了。因为我希望配置文件是用户可编辑的,所以我将它们保存在 JAR 之外但在同一个目录中,但是现在当我从命令行运行我的应用程序时,它找不到配置文件。如果我手动将文件添加到 ROOT 文件夹的 JAR 文件中,那么一切都很好。

那么我怎样才能告诉 Java 在 JAR 之外寻找我的可加载文件呢? -classpath 选项无效。

【问题讨论】:

    标签: java classpath


    【解决方案1】:

    这是因为您加载它们的方式要求当从 jar 运行时它们位于 .jar 内,如果不是则位于项目目录内;它依靠类加载器告诉它在哪里可以找到文件。

    如果要打开.jar 之外的文件,只需将其作为File 打开并读入即可。

    我们解决此问题的方法之一是将外部文件名作为命令行上的一个选项(例如java -jar myJar.jar -f filename)。这允许您明确说明文件所在的位置。然后,您可以决定是否也查看默认位置,或者如果文件未在命令行中指定,则在 .jar 中查看。

    【讨论】:

    • 当您说要求文件在 JAR 中时,您能给我一个参考吗?当我通过 Netbeans 运行我的应用程序时,我不明白它们是如何加载的。据我所知,它不会从我的代码中生成 JAR,而只是 .class 文件。反正我还没有找到 JAR 文件
    • @Kerbu - 阅读我写的句子的第二部分。当已编译的类不在 jar 中时,类加载器会返回项目目录结构中的位置(已编译的 .class 文件的位置)。
    • @BrianRoach 解决方案很简单 - 请在下面查看我的答案。
    • @Anil - 你为什么要发布一个已经(正确)回答和接受的 > 1 岁问题的答案?此外,是的,这正是我(超过一岁)的答案所说的。
    • @BrianRoach 我不清楚如何在 Java Webstart 中执行此操作 - 用户无法指定文件位置,我不知道文件应该放在 jar 外的目录树中的哪个位置, 可访问。
    【解决方案2】:

    我通过参考this 问题解决了它。我将当前目录添加到 jar 的 MANIFEST 文件中,它可以工作。

    我想知道为什么在这种情况下会忽略 -classpath 选项?安全吗?

    【讨论】:

    • 对不起,我也应该想到的;从来没有那样接近它。至于为什么java 在有清单时会忽略-classpath ......可能是的。也简化了事情(你不能有冲突的路径等)
    • 没问题。我使用的 Propertyloader 类(来自 Javaworld 链接)的目的是尽可能简化配置文件的加载。 Netbeans 也不允许在构建之前对清单进行手动调整(据我所知)。
    【解决方案3】:

    我也有同样的问题,看了你的帖子,但最后的答案很简单。

    我有一个通过 Java Webstart 部署的应用程序,并且正在 Netbeans 7.3 中构建它。

    我有一个属性文件 config.xml,它将在运行时使用用户首选项进行更新,例如“记住我的密码”。 因此它需要在 jar 文件的外部。

    Netbeans 在项目文件夹下创建一个“dist”文件夹。此文件夹包含项目 jar 文件和 jnlp 文件。我将 config.xml 复制到 dist 文件夹,并使用标准加载属性文件

        FileInputStream in = new FileInputStream("config.xml");
        testData.loadFromXML(in);
        in.close();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-06
      • 2011-04-10
      • 1970-01-01
      • 2014-12-30
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      相关资源
      最近更新 更多