Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ResourceBundle.getBundle如何加载属性文件?_Java_Properties_Resources_Bundle_Properties File - Fatal编程技术网

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

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()方法如何查找

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

属性文件位置:/sandbox/resources/Properties/MessageBundle\u en\u 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

但不清楚它是如何开始寻找这些文件的。它是否从项目目录的根开始查看?如果有人能回答这个问题,那就好了。完全限定类名是什么意思。我不认为“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包或目录下。在工作区刷新之前,它可能会一直工作。