Java语言提供了ResourceBundle类来对properties类型的资源文件加以处理。
本文对ResourceBundle类做一个解说。
开始之前,我们先解释一下什么是properties类型的资源文件。
在Java语言中,使用一种以.properties为扩展名的文本文件作为资源文件,该类型的文件的内容格式为类似:
#注释语句
some_key=some_value
形式。以#开头的行作为注释行,ResourceBundle类处理时会加以忽略;其余的行可以以 key名=value值 的形式加以记述。
Java的ResourceBundle类可以对这种形式的文件加以处理。
ResourceBundle类的使用方法也非常简单。我们使用一个例子来说明。
我们假设有下面2个properties文件:
TestProperties.properties
<!--//
function _syboos_pmplat_setUpCode() {
//dp.SyntaxHighlighter.ClipboardSwf = 'js/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('_syboos_pmplat_code');
}
window.onload=_syboos_pmplat_setUpCode;
//-->
- #key=value
- userIdLabel=UserId:
- userNameLabel=UserName:
#key=value
userIdLabel=User Id:
userNameLabel=User Name:
TestProperties_zh_CN.properties
- #key=value
- userIdLabel=用户ID:
- userNameLabel=用户名:
#key=value
userIdLabel=用户ID:
userNameLabel=用户名:
大家可能注意到TestProperties_zh_CN.properties文件名中有一个
_zh_CN名
称,该名称其实是用于资源文件的本地化处理。什么是本地化呢?我们简单说明一下:我们在进行系统开发时,很多时候需要为不同地区的用户准备不同的界面,比
如,如果一个系统同时面向 英语圈
的用户以及面向中国的用户,我们就必须为系统准备2套界面(包括消息),一套为英语界面,一套为中文界面。当然,除了界面不同之外,系统的处理过程完全一
样。当然我们不可能为它们分别开发2套不同的系统,怎么办呢?这就需要用到资源的本地化处理。也就是说,根据用户所处的地区或语言的不同,分别准备不同的
资源文件,这样就可以为不同的用户准备不同的界面但使用的却是同一套系统逻辑。
我们上面的2个文件就是2套不同的资源。
我们是使用ResourceBundle类处理不同资源的代码:
TestProperties.java
- packagecom.test.properties;
- importjava.util.Enumeration;
- importjava.util.Locale;
- importjava.util.ResourceBundle;
- publicclassTestProperties{
- publicstaticvoidmain(String[]args){
- StringresourceFile="com.test.properties.TestProperties";
- System.out.println("---DefaultLocale---");
- ResourceBundleresource=ResourceBundle.getBundle(resourceFile);
- testResourceBundle(resource);
- System.out.println("---Locale.SIMPLIFIED_CHINESE---");
- resource=ResourceBundle.getBundle(resourceFile,Locale.SIMPLIFIED_CHINESE);
- testResourceBundle(resource);
- }
- privatestaticvoidtestResourceBundle(ResourceBundleresource){
- StringuserIdLabel=resource.getString("userIdLabel");
- System.out.println(userIdLabel);
- Enumeration<String>enu=resource.getKeys();
- System.out.println("keys:");
- while(enu.hasMoreElements()){
- System.out.println(enu.nextElement());
- }
- }
- }
package com.test.properties;
import java.util.Enumeration;
import java.util.Locale;
import java.util.ResourceBundle;
public class TestProperties{
public static void main(String []args) {
String resourceFile = "com.test.properties.TestProperties";
//创建一个默认的ResourceBundle对象
//ResourceBundle会查找包com.test.properties下的TestProperties.properties的文件
//com.test.properties是资源的包名,它跟普通java类的命名规则完全一样:
//- 区分大小写
//- 扩展名 .properties 省略。就像对于类可以省略掉 .class扩展名一样
//- 资源文件必须位于指定包的路径之下(位于所指定的classpath中)
//另外,对于非西欧字符(比如中日韩文等),需要使用native2ascii命令或类似工具将其转换成ascii码文件格式,否则会显示乱码。
System.out.println("---Default Locale---");
ResourceBundle resource = ResourceBundle.getBundle(resourceFile);
testResourceBundle(resource);
System.out.println("---Locale.SIMPLIFIED_CHINESE---");
//创建一个指定Locale(本地化)的ResourceBundle对象,这里指定为Locale.SIMPLIFIED_CHINESE
//所以ResourceBundle会查找com.test.properties.TestProperties_zh_CN.properties的文件
//
//中文相关的Locale有:
//Locale.SIMPLIFIED_CHINESE : zh_CN
resource = ResourceBundle.getBundle(resourceFile, Locale.SIMPLIFIED_CHINESE);
//Locale.CHINA: zh_CN
//Locale.CHINESE: zh
testResourceBundle(resource);
//显示
//
}
private static void testResourceBundle(ResourceBundle resource) {
//取得指定关键字的value值
String userIdLabel = resource.getString("userIdLabel");
System.out.println(userIdLabel);
//取得所有key值
Enumeration <String>enu = resource.getKeys();
System.out.println("keys:");
while(enu.hasMoreElements()) {
System.out.println(enu.nextElement());
}
}
}
解说:
1,为了便于理解,我们把解说放在Java源代码中了,这里不再详述了。
2,对于中文资源文件TestProperties_zh_CN.properties,需要使用native2ascii 命令将其转换为ascii码。例如:
native2ascii -encoding UTF-8 c:\TestProperties_zh_CN.properties c:\java\com\test\properties\TestProperties_zh_CN.properties
至于native2ascii的详细用法这里不做详述了。
3,将上面3个文件都保存在 c:\java\com\test\properties\ 目录下。其中TestProperties_zh_CN.properties为经过native2ascii转换后的文件。
4,编译执行,将会在屏幕上显示:
c:\java\javac com.test.properties.TestProperties.java
c:\java\java com.test.properties.TestProperties
---Default Locale---
User Id:
keys:
userNameLabel
userIdLabel
---Locale.SIMPLIFIED_CHINESE---
用户ID:
keys:
userNameLabel
userIdLabel
分享到:
相关推荐
这里面有详细的处理maven项目中resources目录下的资源文件,方便快捷的得到或设置资源文件中的内容,本人亲测,里面还有示例
国际化插件-ResourceBundle Editor
使用java.util.Properties类的load()方法 示例: InputStream in = lnew BufferedInputStream(new FileInputStream(name)); Properties p = new Properties(); p.load(in); 2。使用java.util....
这是一个像 PHP 中的 Resource Bundle 一样的 ICU 直接处理 .txt 文件(不需要使用 genrb) 此实现仅为开发环境开发,不应在生产环境中运行。 开发它是为了简化创建 ResourceBundle 源的过程,而不必每次使用 ...
Java读取含中文key的properties文件,并且可以使用反射调用方法
java.util.ResourceBundle使用详解
j18n替代了java.util.ResourceBundle以支持Unicode属性文件。 您可以将UTF8字符放入* .properties中,唯一的代码更改是将“ ResourceBundle.getBundle(..)”替换为“ J18n.getBundle(..)”。
ResourceBundleEditor 资源文件编辑器 eclipse的资源文件编辑插件 经常在做国际化的时候编辑properties文件。转换文件字符总是让人比较繁琐。有了这个插件所见即所得。我们输入中文的时候自动就转换完毕了。同样的...
这是一个简单实现读取properties、xml格式的配置文件... 方法一:java.util.ResourceBundle读取properties类型文件; 方法二:java.util.Properties读取properties类型文件; 二、读取xml类型文件 dom4j读取xml文件;
ResourceBundle Editor (eclipse-rbe)是一个用于编辑本地化的属性文件(localized properties files)。它让你通一个屏幕就能够同时管理所有相关联属性文件中的key/value信息。它所具有的功能包括:自动为Keys分类,...
一个消息资源包:基名_语言_国家.properties ResourceBundle Locale 3、日期时间格式化:类型转换 String--------->java.util.Date java.util.Date--------->String DateFormat 4、数字的格式化:货币 5...
Ø java.util.ResourceBundle:用于加载一个国家、语言资源包。 Ø java.util.Locale:用于封装一个特定的国家/区域、语言环境。 Ø java.text.MessageFormat:用于格式化带占位符的字符串。 为了实现程序的国际...
第5章对编码能力提升,包括异常处理、输入输出、集合框架、正则表达式、枚举类型和Annotation。异常处理,对程序中可能出现的异常情况进行处理;输入输出,对输入输出流和文件操作进行介绍;集合框架,介绍泛型与...
自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK...
NULL 博文链接:https://singleant.iteye.com/blog/1485781
private ResourceBundle resourceBundle; public CommonParam() { propertyFileName = "com/test/dao/SysConfig"; resourceBundle = ResourceBundle.getBundle(propertyFileName); } public String ...
java常用类库 主要方法分析 pdf 文件 实例讲解 StringBuffer类 Runtime类 Locable类 ResourceBundle类 System类 Date类 Calendar类 DateFormat类 Math类
概述 软件包 类 使用 树 已过时 索引 帮助 上一个类 下一个类 框架 无框架 所有类 摘要: 嵌套 | 字段 | 构造方法 | 方法 详细信息: 字段 | 构造方法 | 方法 ---------------------------------------------...
ResourceBundle:资源包,包括图片源代码