介绍:
ResourceBundle类主要作用是读取属性文件,读取属性文件时可以直接指定属性文件的名称(指定名称时不需要文件的后缀),也可以根据Locale所指定的区域码来选取指定的资源文件;
ResourceBundle类的常用方法:
序号 |
方 法 |
描 述 |
1 |
public static final ResourceBundle getBundle (String baseName) |
取得ResourceBundle的实例, 并指定要操作的资源文件名称 |
2 |
public static final ResourceBundle getBundle (String baseName,Locale locale) |
取得ResourceBundle的实例, 并指定要操作的资源文件名称和区域码 |
3 |
public final String getString(String key) |
根据key从资源文件 中取出对应的value |
Java平台提供了两个ResourceBundle的子类,即ListResourceBundle和PropertyResourceBundle,这为创建资源提供了一种相当简单的方式。ListResourceBundle以键/值对的列表方式管理其资源。PropertyResourceBundle则使用一个属性文件来管理其资源。
如果需要编写自己的ResourceBundle子类,子类必须重写两个方法:handleGetObject和getKeys()。
getBundle工厂方法创建的资源包实例是默认缓存的,getBundle 客户端可以清除缓存、使用生存时间值管理已缓存资源包实例的生命周期,或者指定不缓存资源包实例。
简单的示例,MyResources继承了ResourceBundle类,代码如下:
public class MyResources extends ResourceBundle {
public Object handleGetObject(String key) {
if (key.equals("okKey")) return "Ok";
if (key.equals("cancelKey")) return "Cancel";
return null;
}
public Enumeration<String> getKeys() {
return Collections.enumeration(keySet());
}
// Overrides handleKeySet() so that the getKeys() implementation
// can rely on the keySet() value.
protected Set<String> handleKeySet() {
return new HashSet<String>(Arrays.asList("okKey", "cancelKey"));
}
}
Demo:
public static void main(String[] args) {
ResourceBundle bundle = ResourceBundle.getBundle("res", new Locale("zh", "CN"));
String cancel = bundle.getString("cancelKey");
System.out.println(cancel);
bundle = ResourceBundle.getBundle("res", Locale.US);
cancel = bundle.getString("cancelKey");
System.out.println(cancel);
bundle = ResourceBundle.getBundle("res", Locale.getDefault());
cancel = bundle.getString("cancelKey");
System.out.println(cancel);
bundle = ResourceBundle.getBundle("res", Locale.GERMAN);
cancel = bundle.getString("cancelKey");
System.out.println(cancel);
}
新建资源文件:res_zh_CN.properties
在文件中输入内容:cancelKey=u53D6u6D88(取消),运行程序即可正确输出结果;
此处的ResourceBundle是用于读取和写入属性资源的,因此具体的实现类是ResourceBundle的子类PropertyResourceBundle;