我编写了一个Java程序,我从JAR文件打包并运行。我需要一些用户可更改的配置文件,它们只是文本行:
key = value
格式。要加载这些文件,我使用了here描述的类。当我通过Netbeans IDE运行程序时,一切正常,因为我已将配置文件存储在Project属性中。
当我将应用程序构建到JAR文件中时会出现问题。由于我希望配置文件是用户可编辑的,我将它们保留在JAR的外部,但是在同一目录中,但现在当我从命令行运行我的应用程序时,它无法找到配置文件。如果我手动将文件添加到ROOT文件夹中的JAR文件,那么一切都很好。
那么我如何告诉Java在JAR之外查看我的可加载文件? -classpath选项无效。
答案 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();