9

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

这是配置:

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

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

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

4

4 回答 4

10

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

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

javadoc说:

baseName - the base name of the resource bundle, a fully qualified class name
于 2012-06-06T09:44:17.087 回答
1

你试过这个吗?

ResourceBundle.getBundle("conf/messages", java.util.Locale.getDefault());
于 2012-06-06T09:43:25.937 回答
0

ResourceBundle 总是搜索一个属性文件,所以,如果你运行:

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

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

于 2015-05-20T08:38:51.973 回答
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());

谢谢

于 2015-10-01T03:13:52.570 回答