将文件加载到分发罐外部

时间:2012-02-04 16:53:30

标签: java classpath

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

key = value

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

当我将应用程序构建到JAR文件中时会出现问题。由于我希望配置文件是用户可编辑的,我将它们保留在JAR的外部,但是在同一目录中,但现在当我从命令行运行我的应用程序时,它无法找到配置文件。如果我手动将文件添加到ROOT文件夹中的JAR文件,那么一切都很好。

那么我如何告诉Java在JAR之外查看我的可加载文件? -classpath选项无效。

3 个答案:

答案 0 :(得分:3)

那是因为你加载它们的方式要求从jar运行时它们在.jar内,否则就在项目目录内;它依靠类加载器告诉它在哪里找到文件。

如果你想在.jar之外打开一个文件,你只需要将其作为File打开并阅读。

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

答案 1 :(得分:0)

我通过提及this问题解决了这个问题。我将当前目录添加到jar的MANIFEST文件中,它可以正常工作。

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

答案 2 :(得分:0)

我遇到了同样的问题并看到了你的帖子,但答案到底很简单。

我通过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();