在前面讲到的java类集中的Hashtable中,有一个子类Properties,此类定义如下:
public class Properties extends Hashtable
该类表示了一个持久的属性集。Properties可保存在流中或从流中加载。属性列表每个键及其对应的值都是一个字符串。
常用方法:
1.
String getProperty(String key)
用指定的键在此属性列表中搜索属性
2.
String getProperty(String key,Sting defaultValue)
用指定的键在此属性列表中搜索属性
3.
void list(PringStream out)
将属性列表输出到指定的输出流
4.
void list(PrintWriter out)
将属性列表输出到指定的输出流
5.
void load(InputStrean is)
从输入流中读取属性列表
6.
void load(Reader reader)
按简单的面向行的格式从输入字符流中读取
7.
void loadFromXML(InputStream in)
将指定输入流中由XML文档所表示的书友属性加载到此属性列表
8.
Object setProperty(String key,String value)
调用hashtable的方法put
9.
void store(OutputStream out,String comments)
将属性列表写入输出流
10.
void store(Writer writer,String comments)
将属性列表写入输出字符流
11.
void storeToXML(OutputStream os,String comment)
发出一个表示此表中包含的所有属性的XML文档
.
实例:
packagecom.fuwh.property;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.Properties;public classPropertyTest01 {public static voidmain(String[] args) {//定义一个属性操作类
Properties property=newProperties();
property.setProperty("魏", "曹操");
property.setProperty("蜀", "刘备");
property.setProperty("吴", "孙权");
System.out.println("属性存在:"+property.getProperty("魏","假曹操"));
System.out.println("属性存在:"+property.getProperty("蜀国","假刘备"));//将此属性保存在一个属性文件中(sanguo.properties)
System.out.println("*** 写入属性文件 ***");try{
property.store(new FileOutputStream(new File("sanguo.properties")), "三国争霸");
}catch(FileNotFoundException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("*** 从属性文件中读取 ***");
Properties readFromProperties=newProperties();try{
readFromProperties.load(new FileInputStream("sanguo.properties"));
}catch(FileNotFoundException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("三国:"+readFromProperties.getProperty("三国"));
System.out.println("魏:"+readFromProperties.getProperty("魏"));
System.out.println("四国:"+readFromProperties.getProperty("四国","四国不存在"));
System.out.println("*** 写入XML文件 ***");try{
property.storeToXML(new FileOutputStream(new File("sanguo.xml")), "三国");
}catch(FileNotFoundException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("*** 从XML文件中读取 ***");
Properties readFromXML=newProperties();try{
readFromXML.load(new FileInputStream("sanguo.properties"));
}catch(FileNotFoundException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("三国:"+readFromXML.getProperty("三国"));
System.out.println("蜀:"+readFromXML.getProperty("蜀"));
System.out.println("四国:"+readFromXML.getProperty("四国","四国不存在"));
}
}
View Code
国际化:
国际化程序,说白了,就是多语言对应,根据访问人的地区来选择显示何种语言。
在Java中,要实现国际化,需要使用到的类是:Local,ResourceBoundle,MessageFormat几个类。
Local:
类的定义如下:
public final class Local extends Object implements Cloneable,Serializable
构造方法:
Local(String language):根据语言代码构造一个语言环境
Local(String language,String country):根据语言和国家/地区构造一个语言环境
Local(String language,String country,String variant):根据语言、国家/地区和变量构造一个语言环境
Local对象表示了特定的地理、政治和文化地区。语言参数是一个有效的ISO语言代码,这些代码是由 ISO-639 定义的小写两字母代码。在许多网站上都可以找到这些代码的完整列表,如:
http://www.loc.gov/standards/iso639-2/englangn.html。
我们也可以在浏览器中找到,例如:
前面两位小写的就是ISO语言代码,后面两位大写的就是国家代码。
在Local类中提供了很多常量,可以很方便的创建Local对象。
ResourceBundle:
类的定义如下:
public abstract class ResourceBundle extends Object
可以发现,这是一个抽象类。可以通过类中的getBundle方法来获取ResourceBundle对象。
资源包包含特定与语言环境的对线个,当程序需要一个特定与语言环境的资源时,程序可以从适合当前用户语言环境的资源包中加载它,使用这种方式可以实现国际化。
在定义资源文件的时候,必须要采取 文件名_ISO语言代码_ISO国家地区代码 的格式。
MessageFormat:
类的定义如下:
public class MessageFormat extends Format
这个类继承自Format类,提供了对消息的一些格式化,在Format类中,还有DateFormat,NumberFormat等子类,分别提供对日期和数字的格式化。
主要方法:
static String format(String pattern,Object... arguments)
实例:
packagecom.fuwh.intel;importjava.text.MessageFormat;importjava.util.Locale;importjava.util.ResourceBundle;public classIntelTest01 {public static voidmain(String[] args) {
Locale china=new Locale("zh","CN");
Locale japan=new Locale("ja","JP");
ResourceBundle rbChina=ResourceBundle.getBundle("welcome",china);
ResourceBundle rbJapan=ResourceBundle.getBundle("welcome",japan);
String str1=rbChina.getString("welcomeMessage");
String str2=rbJapan.getString("welcomeMessage");
System.out.println("中文:"+MessageFormat.format(str1, "张三"));
System.out.println("日文:"+MessageFormat.format(str2, "趙さん"));
}
}
View Code