Java中读写资源文件最重要的类是Properties
1) 资源文件要求如下:
1、properties文件是一个文本文件
2、properties文件的语法有两种,一种是注释,一种属性配置。
注 释:前面加上#号
属性配置:以“键=值”的方式书写一个属性的配置信息。
3、properties文件的一个属性配置信息值可以换行,但键不可以换行。值换行用“\”表示。
4、properties的属性配置键值前后的空格在解析时候会被忽略。
5、properties文件可以只有键而没有值。也可以仅有键和等号而没有值,但无论如何一个属性配置不能没有键。
eg:
正确的资源文件格式为:
2) 功能大致如下:
1. 读写Properties文件
2. 读写XML文件
3. 不仅可以读写上述两类文件,还可以读写其它格式文件如txt等,只要符合key=value格式即可.
Properties能读取以key,value存储的任何格式文件,看一下他的类结构就知道为什么了
从上面的类结构图可以看出,它继承了Hashtable并实现了Map接口
3)代码演示:
1 packagecom.ifly.myhome.test;2
3 importjava.io.File;4 importjava.io.FileInputStream;5 importjava.io.FileOutputStream;6 importjava.io.IOException;7 importjava.io.InputStream;8 importjava.io.OutputStream;9 importjava.io.UnsupportedEncodingException;10 importjava.util.Properties;11
12 public classPropertiesMyTest13 {14
15 public static voidmain(String[] args)16 {17
18 String readfile = "e:" + File.separator + "readfile.properties";19 String writefile = "e:" + File.separator + "writefile.properties";20 String readxmlfile = "e:" + File.separator + "readxmlfile.xml";21 String writexmlfile = "e:" + File.separator + "writexmlfile.xml";22 String readtxtfile = "e:" + File.separator + "readtxtfile.txt";23 String writetxtfile = "e:" + File.separator + "writetxtfile.txt";24
25 readPropertiesFile(readfile); //读取properties文件
26 writePropertiesFile(writefile); //写properties文件
27 readPropertiesFileFromXML(readxmlfile); //读取XML文件
28 writePropertiesFileToXML(writexmlfile); //写XML文件
29 readPropertiesFile(readtxtfile); //读取txt文件
30 writePropertiesFile(writetxtfile); //写txt文件
31 }32
33 //读取资源文件,并处理中文乱码
34 public static voidreadPropertiesFile(String filename)35 {36 Properties properties = newProperties();37 try
38 {39 InputStream inputStream = newFileInputStream(filename);40 properties.load(inputStream);41 inputStream.close(); //关闭流
42 }43 catch(IOException e)44 {45 e.printStackTrace();46 }47 String username = properties.getProperty("username");48 String passsword = properties.getProperty("password");49 String chinese = properties.getProperty("chinese");50 try
51 {52 chinese = new String(chinese.getBytes("ISO-8859-1"), "GBK"); //处理中文乱码
53 }54 catch(UnsupportedEncodingException e)55 {56 e.printStackTrace();57 }58 System.out.println(username);59 System.out.println(passsword);60 System.out.println(chinese);61 }62
63 //读取XML文件,并处理中文乱码
64 public static voidreadPropertiesFileFromXML(String filename)65 {66 Properties properties = newProperties();67 try
68 {69 InputStream inputStream = newFileInputStream(filename);70 properties.loadFromXML(inputStream);71 inputStream.close();72 }73 catch(IOException e)74 {75 e.printStackTrace();76 }77 String username = properties.getProperty("username");78 String passsword = properties.getProperty("password");79 String chinese = properties.getProperty("chinese"); //XML中的中文不用处理乱码,正常显示
80 System.out.println(username);81 System.out.println(passsword);82 System.out.println(chinese);83 }84
85 //写资源文件,含中文
86 public static voidwritePropertiesFile(String filename)87 {88 Properties properties = newProperties();89 try
90 {91 OutputStream outputStream = newFileOutputStream(filename);92 properties.setProperty("username", "myname");93 properties.setProperty("password", "mypassword");94 properties.setProperty("chinese", "中文");95 properties.store(outputStream, "author: shixing_11@sina.com");96 outputStream.close();97 }98 catch(IOException e)99 {100 e.printStackTrace();101 }102 }103
104 //写资源文件到XML文件,含中文
105 public static voidwritePropertiesFileToXML(String filename)106 {107 Properties properties = newProperties();108 try
109 {110 OutputStream outputStream = newFileOutputStream(filename);111 properties.setProperty("username", "myname");112 properties.setProperty("password", "mypassword");113 properties.setProperty("chinese", "中文");114 properties.storeToXML(outputStream, "author: shixing_11@sina.com");115 outputStream.close();116 }117 catch(IOException e)118 {119 e.printStackTrace();120 }121 }122
123 }
View Code
运行本程序所需的资源文件,我是放在E盘根目录,如E:/readfile.properties
1. readfile.properties
username=kh
password=kh
chinese=谓语
2. writefile.properties
#author: shixing_11@sina.com
#Fri May 28 22:19:44 CST 2010
password=kh
chinese=\u8C13\u8BED
username=kh
3. readxmlfile.xml
mypassword
中文
myname
4. writexmlfile.xml
kh
中文
kh
5. readtxtfile.txt
username=kh
password=kh
chinese=中文
6. writetxtfile.txt
password=kh
chinese=/u4E2D/u6587
username=kh
4)Properties获取数据乱码解决
1.原因
Properties调用load(InputStream)时,读取文件时使用的默认编码为ISO-8859-1;当我们讲中文放入到properties文件中,通过getProperty(key)获取值时,取到得数据是ISO-8859-1格式的,但是ISO-8859-1是不能识别中文的。
2.解决方法
通过getProperty()获取的数据data既然是ISO-8859-1编码的,就通过data.getByte(“iso-8859-1”)获取获取,使用new String(data.getByte(“iso-8859-1”),”UTF-8”)进行转换。当然properties文件的编码类型需要和new String(Byte[],charst)中的第二个参数的编码类型相同