我花了一些时间尝试加载属性文件,但找不到任何有效的解决方案。这是我的设置的图片。
属性文件位置:/sandbox/resources/properties/MessageBundle_zh_CN.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”是完全合格的。
答案 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包中创建更多包,只需从那里而不是从项目的根目录开始。