`

关于java.util.ResourceBundle

阅读更多
import java.util.ResourceBundle;

public class Test {
	
	public static void main(String args[]) {
		ResourceBundle.getBundle("openfire_i18n");
	}

}

 

先看上述代码运行结果,如果没有做任何额外设置,就会报:

Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name openfire_i18n, locale zh_CN
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1427)
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1250)
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:705)
    at Test.main(Test.java:6)

表示找不到资源,其实是没有设定好寻找资源的路径,也就是ClassPath,那为什么会是ClassPath呢?

 

我们知道,这里getBundle相当于

getBundle(baseName, Locale.getDefault(), this.getClass().getClassLoader());

 它是有利用默认的Locale和ClassLoader的,而这个ClassLoader恰恰有与ClassPath绑定,看下文:

 

You can certainly set any system properties you want at any point of time. The question is, will it have any effect?

In the case of classpath, the answer is NO. The system class loader is initialized at a very early point in the
startup sequence. It copies the classpath into its own data structures, and the classpath property is not read again. Changing it affect nothing in the system.

 

但现在问题来了,ClassLoader的doc解释中我并没有找到ClassPath相关的,看Class类:

 

public ClassLoader getClassLoader() {
    ClassLoader cl = getClassLoader0();
    if (cl == null)
        return null;
    SecurityManager sm = System.getSecurityManager();
    if (sm != null) {
        ClassLoader ccl = ClassLoader.getCallerClassLoader();
        if (ccl != null && ccl != cl && !cl.isAncestor(ccl)) {
            sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION);
        }
    }
    return cl;
}
 

可见,应该是在native方法getClassLoader0中实现的,将ClassPath信息纳入搜寻动作中

分享到:
评论

相关推荐

    java.util.ResourceBundle使用详解

    java.util.ResourceBundle使用详解

    使用J2SE API读取Properties文件的六种方法

    ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());  3。使用java.util.PropertyResourceBundle类的构造函数  示例: InputStream in = new BufferedInputStream(new FileInputStream...

    java版历史最全卡bin解析

    private static ResourceBundle bundle = ResourceBundle.getBundle("cardBin"); private static Map, String> bankName = new HashMap(); static{ bankName.put("ABC", "中国农业银行"); bankName.put(...

    投策国际化Lawrence version.xlsx

    Ø java.util.ResourceBundle:用于加载一个国家、语言资源包。 Ø java.util.Locale:用于封装一个特定的国家/区域、语言环境。 Ø java.text.MessageFormat:用于格式化带占位符的字符串。 为了实现程序的国际...

    JavaWeb项目网上书店.rar

    String--------->java.util.Date java.util.Date--------->String DateFormat 4、数字的格式化:货币 5、批量国际化MessageFormat 占位符:aaaa{索引,类型,样式} 索引:0... 类型:date、time、number...

    thundr-1.0.0.zip

    j2js-i18n.zip,j2js-i18n将java.util.resourcebundle转换为javascript

    读取properties、xml格式的配置文件的实例

    这是一个简单实现读取properties、xml格式的配置文件... 方法一:java.util.ResourceBundle读取properties类型文件; 方法二:java.util.Properties读取properties类型文件; 二、读取xml类型文件 dom4j读取xml文件;

    j18n - Java ResourceBundle I18N-开源

    j18n替代了java.util.ResourceBundle以支持Unicode属性文件。 您可以将UTF8字符放入* .properties中,唯一的代码更改是将“ ResourceBundle.getBundle(..)”替换为“ J18n.getBundle(..)”。

    LandscapingScreen:这是我的 Comp Sci IA,我在创建按钮时遇到了问题。 我正在使用 Eclipse 并将 Javafx Scene Builder 链接到它

    导入 java.util.ResourceBundle; 导入 javafx.event.ActionEvent; 导入 javafx.fxml.FXML; 导入 javafx.fxml.Initializable; 导入 java.awt.*; public class sceneController 实现 Initializable { @FXML // fx:id=...

    发送邮件的Java代码

    // ResourceBundle mailProps = ResourceBundle.getBundle("mail"); // 可以从配置文件读取相应的参数 Properties props = new Properties(); String smtp = "smtp.qq.com"; // 设置发送邮件所用到的smtp ...

    WhatsappWEB_Desktop

    导入java.util.ResourceBundle; 导入javafx.event.ActionEvent; 导入javafx.fxml.FXML; 导入javafx.fxml.Initializable; 导入javafx.scene.control.Label; 导入javafx.scene.web.WebEngine; 导入javafx.scene.web....

    Maven2 的新特性.7z

    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:808) at java.util.ResourceBundle.getBundle(ResourceBundle.java:702) …… 幸运的是,Maven2一出现就备受关注,要不了多长时间,诸如此类的...

    ResourceBundle类在jsp中的国际化实现方法

    今天第一次听说页面国际化这个词,所以查资料,顺便做了一个小页面,做做记录。 ...  显然中文字符是需要转换过来的。...@page import=java.util.*%> <!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional/

    DbResourceBundle-开源

    java.util.ResourceBundle及其子类是Java中字符串国际化的基石。 DbResourceBundle提供了一种在符合JDBC的数据库中存储国际化字符串的方法,并保留了类似的接口。

    Pressure-test-for-MySql:由java实现的一个多线程对Mysql数据库测试

    (1)util包: JDBCUtil 类和 jdbc.properties ,后者为mysql数据库root用户账户信息、数据库驱动以及数据库地址的配置信息。前者是数据库的连接获取以及关闭流方法。 (2)testing包: Info负责信息的描述 Gui类负责...

Global site tag (gtag.js) - Google Analytics