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

时间:2019-05-13 02:41:32

标签: java properties resources bundle properties-file

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

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

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

enter image description here

不确定发生了什么。我尝试了几种组合,但无法克服异常。我什至尝试了文件夹的整个路径。谁能告诉我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”是完全合格的。

2 个答案:

答案 0 :(得分:2)

尝试如下使用

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

答案 1 :(得分:0)

是的,应该是这样的:

R`esourceBundle mybundle = ResourceBundle.getBundle("MessageBundle");`

它可以在属性包中找到它而无需指定整个路径的原因是因为Java知道默认情况下捆绑包应该在该包中,并且不需要其他部分。 因此,如果您使用整个路径,例如:"/sandbox/resources/properties/MessageBundle",则Java会将其解释为:

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

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