包Java应用程序时,属性文件不包含在jar文件中

时间:2010-01-15 07:28:24

标签: java netbeans

我使用Netbeans开发了Java桌面应用程序。 在我的应用程序中,我使用了一些属性文件,然后将它放在Project文件夹下,以便我可以使用类似的代码访问它

 Properties props = new Properties();
 props.load(new FileInputStream("config.properties"));

但是当我将我的应用程序部署并打包到.jar文件时,我无法找到属性文件的位置,而我的应用程序无法从属性文件中读取值。

如何修复该错误,我应该在哪里放置我的属性文件并加载它?

4 个答案:

答案 0 :(得分:5)

将其放在/src/resources/下,然后像下面一样使用它。

ResourceBundle props = ResourceBundle.getBundle("resources.config");

NetBeans不包含项目目录下的文件。此外,您需要构建项目,以便让NetBeans将properties文件放在/classes目录中。然后你应该能够通过运行你的应用程序或只是一个特定的相关Java类来获取它。

干杯。

答案 1 :(得分:3)

我从ralphie boy的解决方案开始,它没有用。好吧,如果我做了他说的话,它会奏效。这就是我所做的,也许它会增加一些有用的细节。

我总是在项目之后命名我的包,所以我不知道在NetBeans中有字面意思,一个名为<default package>的包。当我将config.properties文件拖到源包级别时,低并看到<default package>。它被放置在src文件夹中,并在dist .jar文件的根目录下构建。在那之后,ralphie男孩的解决方案是剪切和粘贴。

如果您希望资源包或配置文件在包中,则必须在baseName字符串中包含它的路径,例如

ResourceBundle f = ResourceBundle.getBundle("pkgname/config");

ResourceBundle f = ResourceBundle.getBundle("com/mycompany/pkgname/config");

答案 2 :(得分:2)

要包含类路径中存在的属性文件(即,如果它在构建jar文件时位于/ src目录下的某个位置),可以像这样使用getResourceAsStream():

Properties properties = new Properties();
properties.load(this.getClass().getResourceAsStream("/config.properties"));

注意文件名的前导斜杠。您还可以使用它来获取项目中不同包中的文件。

properties.load(this.getClass().getResourceAsStream("/com/company/project/config.properties"));

答案 3 :(得分:2)

在Java项目中,在默认包(即... / src /)中,输入以下文件: messages.properties

在你的代码中,输入:

ResourceBundle f = ResourceBundle.getBundle("messages");

这种方法具有迷人的方面,它实际上有效!

(有人编辑并文明我的原帖,其中有很多SCREAM。我看到一些非常无效的答案获得投票,我在这个网站上很长一段时间没见过。)