Java ResourceBundle.getBundle如何加载属性文件?
我花了一些时间尝试加载属性文件,但找不到任何有效的解决方案。这是我的设置图片 属性文件位置:/sandbox/resources/Properties/MessageBundle\u en\u US.Properties 应用程序位置:/sandbox/src/main/java/com/App/sandbox/App.java 不知道发生了什么事。我尝试了几种组合,但它就是无法通过异常。我甚至尝试了文件夹的整个路径。有人能告诉我ResourceBundle.getBundle()方法如何查找属性文件吗 更新1:此解决方案在几分钟后停止工作:Java ResourceBundle.getBundle如何加载属性文件?,java,properties,resources,bundle,properties-file,Java,Properties,Resources,Bundle,Properties File,我花了一些时间尝试加载属性文件,但找不到任何有效的解决方案。这是我的设置图片 属性文件位置:/sandbox/resources/Properties/MessageBundle\u en\u US.Properties 应用程序位置:/sandbox/src/main/java/com/App/sandbox/App.java 不知道发生了什么事。我尝试了几种组合,但它就是无法通过异常。我甚至尝试了文件夹的整个路径。有人能告诉我ResourceBundle.getBundle()方法如何查找
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
但不清楚它是如何开始寻找这些文件的。它是否从项目目录的根开始查看?如果有人能回答这个问题,那就好了。完全限定类名是什么意思。我不认为“properties.MessageBundle”是完全限定的
ResourceBundle bundle = ResourceBundle.getBundle("properties/MessageBundle");
试着使用以下方法
ResourceBundle bundle = ResourceBundle.getBundle("properties/MessageBundle");
是的,应该是这样的:
R`esourceBundle mybundle = ResourceBundle.getBundle("MessageBundle");`
它可以在properties包中找到它而不指定整个路径的原因是Java知道默认情况下捆绑包应该在该包中,并且它不需要其他部分。
因此,如果您使用整个路径,如:“/sandbox/resources/properties/MessageBundle”
,Java将对其进行如下解释:
"/sandbox/resources/properties/MessageBundle/sandbox/resources/properties/MessageBundle"
这显然是不正确的。因此,如果您需要在properties包中创建更多的包,只需从那里开始,而不是从项目的根目录开始。是的,应该这样做:
R`esourceBundle mybundle = ResourceBundle.getBundle("MessageBundle");`
它可以在properties包中找到它而不指定整个路径的原因是Java知道默认情况下捆绑包应该在该包中,并且它不需要其他部分。
因此,如果您使用整个路径,如:“/sandbox/resources/properties/MessageBundle”
,Java将对其进行如下解释:
"/sandbox/resources/properties/MessageBundle/sandbox/resources/properties/MessageBundle"
这显然是不正确的。因此,如果您需要在属性包中创建更多的包,只需从那里开始,而不是从项目的根目录开始。文件是存在于磁盘上还是存在于jar中?@jspcal它在磁盘上。我用“MessageBundle”暂时修复了它,然后它突然停止工作。我把它改成了“properties/MessageBundle”,现在可以使用了。不确定,但可能存在缓存问题。文件是否存在于磁盘或jar中?@jspcal它在磁盘上。我用“MessageBundle”暂时修复了它,然后它突然停止工作。我把它改成了“properties/MessageBundle”,现在可以使用了。不确定,但可能存在缓存问题。我更新了解决方案。“MessageBundle”参数工作了几分钟,然后停止工作。正在查找的路径似乎存在缓存问题。我更新了解决方案。“MessageBundle”参数工作了几分钟,然后停止工作。正在查找的路径似乎存在缓存问题。我更新了我的帖子。您的解决方案是可行的,但是您知道getBundle如何查找属性文件吗?“MessageBundle”工作了几分钟,然后就停止了工作,所以我认为可能存在缓存问题。您可能已将MessageBundle_en_.properties移动到properties包或目录下。在工作区刷新之前它可能会工作。我更新了我的帖子。您的解决方案是可行的,但是您知道getBundle如何查找属性文件吗?“MessageBundle”工作了几分钟,然后就停止了工作,所以我认为可能存在缓存问题。您可能已将MessageBundle_en_.properties移动到properties包或目录下。在工作区刷新之前,它可能会一直工作。