`

关于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使用详解

    java.util包总结

    Java.util包是Java标准库中的核心包之一,它包含了大量用于日常编程的工具类和接口。这个包在Java 2版本中得到了显著增强,引入了许多重要的数据结构和算法,为Java程序员提供了更丰富的功能。 首先,Java.util包中...

    java的.awt包和java.util包的区别

    ### Java的.awt包和.java.util包的区别 #### Java.util包详解 Java.util包是一个非常重要的标准库之一,其中包含了大量有用的类和接口,为开发者提供了丰富的功能。此包中的类和接口可以分为以下几大类别: 1. **...

    org.apache.jasper.JasperException: java.util.MissingResourceException 解决方案

    在Java中,`java.util.MissingResourceException`是当尝试从`ResourceBundle`中获取一个不存在的资源时抛出的异常。`ResourceBundle`用于管理应用的多语言支持,例如,通过加载.properties文件来提供不同的字符串...

    java版历史最全卡bin解析

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

    java util包使用详解

    Java util包中还提供了许多其它有用的类,例如 BitSet类、 Dictionary类、 EventObject类、 ResourceBundle类、 StringTokenizer类等等。 Java util包提供了许多实用的工具类和数据结构,能够帮助开发者快速地编写...

    Java读取Properties文件的六种方法

    ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault()); // 示例:获取某个键的值 String value = rb.getString("key"); System.out.println(value); } } ``` #### 三、使用 `java.util...

    读取Properties文件的六种方法

    使用`java.util.ResourceBundle.getBundle()` `ResourceBundle`是Java中用于资源绑定的类,它可以用来获取国际化资源。这里我们使用它来加载`Properties`文件。 **代码示例:** ```java import java.util.Locale...

    java 读properties 文件六种方法

    ResourceBundle rb = ResourceBundle.getBundle("path/to/your/file"); String value = rb.getString("key"); System.out.println(value); } } ``` ### 方法三:使用`java.util.PropertyResourceBundle`类 与...

    java读取.properties配置文件的几种方法

    ResourceBundle bundle = ResourceBundle.getBundle("config"); String value = bundle.getString("key"); System.out.println("Value: " + value); } } ``` 在这里,配置文件名(不包括扩展名)作为`...

    Java2_类库.rar

    10. **国际化与本地化**:`java.text`和`java.util.locale`包提供了支持不同地区和语言的工具,如NumberFormat、DateFormat和ResourceBundle,帮助开发者创建全球化应用。 尽管这个压缩包可能并不完整,但它提供的...

    Xml ResourceBundle简单实现

    Xml ResourceBundle的实现基于Java的`java.util.ResourceBundle`类和`java.util.PropertyResourceBundle`类的扩展。通过创建自定义的ResourceBundle类,我们可以解析XML文件并加载其中的资源。这个过程通常包括以下...

    java_util包学习笔记.doc

    Java的`java.util`包是Java标准库中最基础且最重要的部分之一,它包含了大量用于处理常用数据结构、事件处理、日期和时间、I/O流、集合框架等的类和接口。这个包为开发者提供了丰富的功能,使得编写Java程序更加便捷...

    JAVA--基础知识[归纳].pdf

    Java编程语言的基础知识涵盖了许多方面,这里我们主要关注的是`java.util`包,这是一个非常重要的工具类库,提供了丰富的数据结构和实用方法。在Java开发中,`java.util`包几乎无处不在,它包含了处理日期时间、...

    《Java设计模式》课后习题参考答案-刘伟(20180723).pdf

    - java.util.ResourceBundle#getBundle(),加载资源束。 ***.URL#openConnection(),创建一个URL连接实例。 - java.sql.DriverManager#getConnection(),通过驱动管理器获取数据库连接。 b) 建造者模式(Builder...

    Java常用工具类包包含各种常用开发工具

    - `java.util.ResourceBundle`是Java内置的国际化(i18n)支持,可以用来加载不同语言的资源文件,实现多语种替换。 - `org.springframework.context.MessageSource`是Spring框架提供的,它可以更加灵活地管理多...

    JAVA设计模式在JDK中的应用

    - `java.util.ResourceBundle#getBundle()`: 获取资源绑定。 - `java.sql.DriverManager#getConnection()`: 获取数据库连接。 - `java.sql.Connection#createStatement()`: 创建SQL语句。 - `java.sql.Statement#...

    JAVA全套API手册整理.zip

    9. **国际化和本地化**:Java.util.Locale和ResourceBundle类支持不同地区的语言和文化习惯。 10. **数据库连接**:JDBC(Java Database Connectivity)提供了一套接口和类,如Connection、Statement、ResultSet,...

    J2SE API读取Properties文件六种方法

    ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault()); // 获取属性值 System.out.println(rb.getString("welcome")); } } ``` **注意事项:** - 属性文件通常需要放在特定目录下,且遵循...

Global site tag (gtag.js) - Google Analytics