【问题标题】:Properties file isn't included in jar file when package Java application打包 Java 应用程序时,属性文件不包含在 jar 文件中
【发布时间】:2014-05-05 16:13:01
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java netbeans


    【解决方案1】:

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

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

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

    干杯。

    【讨论】:

    • 我按照您的指南进行操作,但程序抛出异常 java.util.MissingResourceException: Can't find bundle for base name config, locale en_US at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1521 ) 在 java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1260)
    • 查看我的附录。确切地说,试试这个ResourceBundle.getBundle("resources.config")。此外,在运行任何特定的 Java 类之前构建项目。
    【解决方案2】:

    我从 ralphie boy 的解决方案开始,但没有成功。好吧,如果我按照他说的去做,那就行了。这就是我所做的,也许它会添加一些有用的细节。

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

        在您的 Java 项目中,在默认包(即 .../src/)中,放置以下文件:messages.properties

        在您的代码中,输入:

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

        这种方法的迷人之处在于它确实有效!

        (有人对我的原始帖子进行了编辑和文化,其中有很多 SCREAM。我看到一些非常无效的答案获得投票,我在这个网站上很久没看到了。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-08
          • 2021-08-09
          • 2013-11-14
          • 2013-05-13
          • 2018-03-17
          • 2012-01-25
          • 2013-03-30
          • 1970-01-01
          相关资源
          最近更新 更多