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

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

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

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

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

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

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

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

干杯。

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

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

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

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

要么

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

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

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

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

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

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

在你的代码中,把这个:

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

这种方法具有实际可行的迷人方面!

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