繁体   English   中英

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

[英]How does Java ResourceBundle.getBundle load properties file?

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

属性文件位置:/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”是完全合格的。

尝试如下使用;

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

是的,这应该是这样的:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM