从jar内部加载ResourceBundle

时间:2012-06-06 09:41:17

标签: java jar resourcebundle

我已经看到了一些关于如何通过 getResourceAsStream 在jar中加载特定文件的答案,我可以管理它。 但是我面对的是一些非常具体的内容,我在论坛上找不到相关答案。

以下是配置:

我有一个包含 conf 目录的jar文件,其中包含2个属性文件 messages_en_US.properties messages_fr_FR.properties 。加载此类资源的经典方法是使用

ResourceBundle.getBundle("messages", java.util.Locale.getDefault());

如果文件在磁盘上,则在programm类路径引用的目录中,这可以正常工作。但我不知道如何管理结合使用 ResourceBundle.getBundle 和使用jar中的资源。 实际上,因为我看不到通过 getResourceAsStream 的任何桥接(或者这意味着我自己管理语言环境以指定整个资源文件名,这不是很聪明)。

有人可以帮忙吗?

感谢。

4 个答案:

答案 0 :(得分:10)

如果它位于jar内的conf目录中,那么您尝试加载的包的包是conf,您应该使用

ResourceBundle.getBundle("conf.messages", java.util.Locale.getDefault());

The javadoc说:

baseName - the base name of the resource bundle, a fully qualified class name

答案 1 :(得分:1)

你试过这个吗?

ResourceBundle.getBundle("conf/messages", java.util.Locale.getDefault());

答案 2 :(得分:0)

ResourceBundle始终搜索属性文件,因此,如果您运行:

ResourceBundle.getBundle("messages", java.util.Locale.getDefault());

ResourceBundle将在类路径中搜索“messages.properties”。

答案 3 :(得分:0)

假设文件messages.properties是某些xyz.jar的一部分,它已经在您要使用它的项目的类路径中。在jar中打包此文件如下:

src
   |main
       |resources
            |com
                |xyz
                   ....|message.properties 

要阅读此文件:

import java.util.ResourceBundle;

...

ResourceBundle.getBundle("com.xyz.resources.messages", Locale.getDefault());

由于