Java ResourceBundle.getBundle 如何加载属性文件?

Posted

技术标签:

【中文标题】Java ResourceBundle.getBundle 如何加载属性文件?【英文标题】:How does Java ResourceBundle.getBundle load properties file? 【发布时间】:2019-09-29 23:47:01 【问题描述】:

我花了一些时间尝试加载属性文件,但找不到任何有效的解决方案。这是我的设置图片。

属性文件位置:/sandbox/resources/properties/MessageBundle_en_US.properties

应用位置:/sandbox/src/main/java/com/app/sandbox/App.java

不知道发生了什么。我尝试了几种组合,但它就是无法摆脱异常。我什至尝试了文件夹的整个路径。谁能告诉我 ResourceBundle.getBundle() 方法如何查找属性文件?

更新 1:此解决方案在几分钟后停止工作:

ResourceBundle mybundle = ResourceBundle.getBundle("MessageBundle");

更新 2: 上面的解决方案在我上次运行期间不再有效。所以我把它改成了:

ResourceBundle mybundle = ResourceBundle.getBundle("properties/MessageBundle");

它奏效了。 ResourceBundle 查找属性文件的方式似乎存在缓存问题。

我仍然不确定 ResourceBundle 类如何查找属性文件。它说要传递一个“baseName”参数:

baseName - the base name of the resource bundle, a fully qualified class name

https://docs.oracle.com/javase/7/docs/api/java/util/ResourceBundle.html#getBundle(java.lang.String)

但不清楚它是如何开始查找文件的。它是否从项目目录的根目录开始查找?如果有人能回答这个问题,那就太好了。 完全限定的类名是什么意思。我不认为“properties.MessageBundle”是完全合格的。

【问题讨论】:

文件是否存在于磁盘或jar中? @jspcal 它在磁盘上。我用“MessageBundle”临时修复了它,然后突然停止工作。我将其更改为“properties/MessageBundle”,它现在可以工作了。不确定,但可能存在缓存问题。 【参考方案1】:

是的,应该是这样

ResourceBundle mybundle = ResourceBundle.getBundle("MessageBundle");

之所以能找到,是在properties包里没有指定整个路径,是因为Java知道bundles默认应该在那个包里,其他部分不需要。 所以,如果你使用像"/sandbox/resources/properties/MessageBundle" 这样的整个路径,Java 会像这样解释它:

"/sandbox/resources/properties/MessageBundle/sandbox/resources/properties/MessageBundle"

这显然是不正确的。因此,如果您需要在属性包中创建更多包,请从那里开始,而不是从项目的根目录开始。

【讨论】:

我更新了解决方案。 “MessageBundle”参数工作了几分钟,然后停止工作。正在查找的路径似乎存在缓存问题。【参考方案2】:

尝试如下使用;

ResourceBundle bundle = ResourceBundle.getBundle("properties/MessageBundle");

【讨论】:

我更新了我的帖子。您的解决方案有效,但您知道 getBundle 如何查找属性文件吗? “MessageBundle”工作了几分钟,然后停止工作,所以我认为可能存在缓存问题。 似乎 Eclipse 工作区没有刷新。您可能已将 MessageBundle_en_US.properties 移动到属性包或目录下。在工作区刷新之前它可能会起作用。

以上是关于Java ResourceBundle.getBundle 如何加载属性文件?的主要内容,如果未能解决你的问题,请参考以下文章

Java 布尔运算

java [Java] Java常用代码#java

Java - 35 Java 实例

Java While 循环

Java 字符串

Java If ... Else