Java语言提供了ResourceBundle类来对properties类型的资源文件加以处理。
本文对ResourceBundle类做一个解说。
开始之前,我们先解释一下什么是properties类型的资源文件。
在Java语言中,使用一种以.properties为扩展名的文本文件作为资源文件,该类型的文件的内容格式为类似:
#注释语句
some_key=some_value
形式。以#开头的行作为注释行,ResourceBundle类处理时会加以忽略;其余的行可以以 key名=value值 的形式加以记述。
Java的ResourceBundle类可以对这种形式的文件加以处理。
ResourceBundle类的使用方法也非常简单。我们使用一个例子来说明。
我们假设有下面2个properties文件:
TestProperties.properties
view plaincopy to clipboardprint?
#key=value
userIdLabel=User Id:
userNameLabel=User Name:
#key=value
userIdLabel=User Id:
userNameLabel=User Name:
TestProperties_zh_CN.properties
view plaincopy to clipboardprint?
#key=value
userIdLabel=用户ID:
userNameLabel=用户名:
#key=value
userIdLabel=用户ID:
userNameLabel=用户名:
大家可能注意到TestProperties_zh_CN.properties文件名中有一个_zh_CN名称,该名称其实是用于资源文件的本地化处理。什么是本地化呢?我们简单说明一下:我们在进行系统开发时,很多时候需要为不同地区的用户准备不同的界面,比如,如果一个系统同时面向 英语圈 的用户以及面向中国的用户,我们就必须为系统准备2套界面(包括消息),一套为英语界面,一套为中文界面。当然,除了界面不同之外,系统的处理过程完全一样。当然我们不可能为它们分别开发2套不同的系统,怎么办呢?这就需要用到资源的本地化处理。也就是说,根据用户所处的地区或语言的不同,分别准备不同的资源文件,这样就可以为不同的用户准备不同的界面但使用的却是同一套系统逻辑。
我们上面的2个文件就是2套不同的资源。
我们是使用ResourceBundle类处理不同资源的代码:
TestProperties.java
view plaincopy to clipboardprint?
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());
}
}
}
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
分享到:
相关推荐
首先,Properties是Java中用于存储键值对的一个类,常用于配置文件的管理。它基于HashTable,提供了一种持久化属性的方式,可以将属性保存到输入流中,或者从输出流中加载。主要方法有setProperty用于设置键值对,...
Java SE编程入门是一个涵盖广泛的主题,它涉及到Java语言的基础知识,包括面向对象编程的概念、类和对象、包的使用、变量、数据类型、运算符、流程控制等。在这个系列的教程中,我们可以看到一系列的PPT和文档,它们...
资源包通常使用`.properties`文件格式来存储键值对。 - **加载资源包**:Java提供了一套完整的API来加载和访问这些资源包,如`ResourceBundle`类。 - **动态选择资源**:根据用户的语言和地区偏好动态选择合适的资源...
Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。为了成功地学习Java基础并为未来的工作做好准备,理解并掌握IDE(集成开发环境)的使用至关重要。IntelliJ IDEA(简称Idea)是JetBrains...
总的来说,Java城市公共路线推荐系统是一个涉及到数据结构、算法、数据库操作、文件处理等多个领域的复杂项目,展现了Java作为开发语言的强大功能。它的实现不仅需要扎实的编程基础,还需要对地理信息系统(GIS)和...
- 主要编程语言:Java - 文件构成:共计248个文件,包括: - Java类文件(.class):108个 - Java源码文件(.java):48个 - 库文件(.jar):38个 - 配置文件(.xml):30个 - 属性文件(.properties):10个 ...
项目共包含131个文件,其中Java源代码文件114个,XML配置文件7个,Shell脚本文件3个,Markdown文档文件2个,BAT批处理文件2个,Git忽略配置文件1个,项目许可证文件1个,以及Properties配置文件1个。该系统提供了...
总的来说,这个Java课程设计涵盖了基础的Java编程、GUI设计、文件操作、事件处理等多个方面,是Java初学者提升技能和实践能力的良好项目。通过这样的设计,学生可以深入理解面向对象编程、异常处理、图形用户界面...
第三章《Properties and Bindings》探讨了JavaFX中的核心概念之一——属性和绑定机制。这使得开发者能够更轻松地管理和更新用户界面上的数据。 - **属性基础**:本节介绍了属性的概念及其在JavaFX中的实现方式,...
【标题】"applets.zip" 是一个以"applets"为主题的...如果你正在处理这个"applets.zip"文件,可能是在进行历史项目的研究,或是为了教学目的回顾这一技术。解压并探索其内容将有助于深入理解Java Applets的结构和功能。
这些示例非常适合Java初学者快速上手,同时也为那些偶尔需要回顾连接代码的专业人士提供方便。 ### Oracle 8/8i/9i数据库连接 Oracle是一种广泛使用的数据库管理系统,支持多种连接方式。其中,thin驱动模式是一种...
在深入解析EJB 3.1的五大改进模式之前,我们首先简要回顾一下EJB(Enterprise Java Beans)的基本概念及其在Java EE平台中的重要性。EJB是Java EE的核心组件之一,旨在提供企业级应用所需的高级功能,如事务管理、...
主程序类、配置文件(如application.properties)、数据库配置、实体类、Service接口及实现、Controller层处理HTTP请求的类、视图解析相关的目录(如templates)、以及可能的静态资源(如CSS、JS、图片等)。...
Struts1.x支持国际化和本地化,可以通过资源文件(properties文件)管理不同语言的文本,根据用户的浏览器设置动态加载相应的资源文件。 **8. 组件重用** Struts1.x的Tiles框架允许开发者定义可重用的页面布局...
除此之外,还有许多其他的工具类,例如`Optional`用于处理可能为null的对象,`ExecutorService`和`ThreadPoolExecutor`用于线程池管理,`BitSet`用于位操作,以及`Properties`用于处理配置文件等。 这个"工具类收集...
为了处理大量分散在多个文件中的国际化消息,我们可以创建一个配置类来自动扫描特定文件夹下的所有properties文件。以下是一个可能的实现: ```java @Configuration public class I18nConfig { @Bean public ...
【标题】"最简单的Hibernate工程"揭示了这个项目的核心是介绍和实现了一个基本的Hibernate框架应用。Hibernate,作为Java领域中的一...同时,对于有经验的开发者来说,这也是一个回顾和验证Hibernate基础功能的好资源。
Java平台为实现国际化提供了基础支持,包括使用Unicode编码和Locale类来处理多语言环境,以及ResourceBundle类来加载和管理不同地区的资源文件。例如,创建一个名为`applicationResource.properties`的主资源文件,...
【标签】"jsp demo"进一步确认了这个项目是一个JSP的示例,它可能用于教学,展示如何使用JSP语言与Java后端交互,处理用户请求,动态生成HTML页面,以及与数据库进行交互。 在【压缩包子文件的文件名称列表】中,...