java 属性和操作_Java操作属性文件与国际化

在前面讲到的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文档

.

实例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

9e3629104e59360c9e2b57b43b1fbecb.png

国际化:

国际化程序,说白了,就是多语言对应,根据访问人的地区来选择显示何种语言。

在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。

我们也可以在浏览器中找到,例如:

096068945c85bc08992112579bd1de36.png

前面两位小写的就是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)

实例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

b4bf77e9f777645a0122d66f124f0b9f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值