Java知识积累——Properties类的使用示例

最近一直在研究properties配置文件,突然碰到了一个java的类,名为Properties。该类继承自HashTable,提供的方法很像Map的实现类HashMap。一时间激发了我对此类的关注和研究,通过找资料和自行调试,发现该类能够在程序运行初期给我们提供帮助。通过解析前置文件(含程序需要的某些参数),获得程序运行所需的配置信息,存入Properties类中,供程序调用。

Properties类的作用就像其名字所体现的一样,主要是解决属性问题的,说白了就是此类和配置文件的关系十分暧昧。现将Properties类的常见使用场景概括如下:

1.从properties配置文件中读取数据,解析key-value对,存入Properties类中。

2.从xml配置问价那种读取数据,解析key-value对,存入Properties类中。

3.将Properties类中存储的key-value对,输出到properties配置文件中。

4.将Properties类中存储的key-value对,输出到xml配置文件中。

见面四个函数分别对应了这四种情况:

 1 //读取properties文件的配置信息到Properties类中
 2 public void readPropFile(){
 3     Properties prop = new Properties();
 4     Enumeration<String> en = null;
 5     String key = null;
 6     
 7     InputStream input = null;
 8     try {
 9         input = this.getClass().getClassLoader().getResourceAsStream("test.properties");
10         prop.load(input);
11         en = (Enumeration<String>) prop.propertyNames();
12         //prop.list(System.out);
13         while(en.hasMoreElements()){
14             key = en.nextElement();
15             System.out.println(key+"---"+prop.getProperty(key));
16         }
17     } catch (Exception e) {
18         e.printStackTrace();
19     } finally{
20         try {
21             input.close();
22         } catch (Exception e2) {
23             e2.printStackTrace();
24         }
25     }
26 }
27 
28 //读取xml文件的配置信息到Properties类中
29 public void readXmlFile(){
30     Properties prop = new Properties();
31     Enumeration<String> en = null;
32     String key = null;
33     
34     InputStream input = null;
35     try {
36         input = this.getClass().getClassLoader().getResourceAsStream("test.xml");
37         prop.loadFromXML(input);
38         en = (Enumeration<String>) prop.propertyNames();
39         //prop.list(System.out);
40         while(en.hasMoreElements()){
41             key = en.nextElement();
42             System.out.println(key+"---"+prop.getProperty(key));
43         }
44     } catch (Exception e) {
45         e.printStackTrace();
46     } finally{
47         try {
48             input.close();
49         } catch (Exception e2) {
50             e2.printStackTrace();
51         }
52     }
53 }
54 
55 //将Properties类中的key-value对,存到properties文件中
56 public void printProp(){
57     Properties prop = new Properties();
58     prop.setProperty("content1", "there is no problem");
59     prop.setProperty("content2", "hello world");
60     
61     //PrintWriter outputFile = null;
62     FileOutputStream outputFile = null;
63     try {
64         //outputFile = new PrintWriter(new File("src/target.properties"));
65         outputFile = new FileOutputStream("src/target.properties");
66         prop.store(outputFile, "test target file");
67     } catch (Exception e) {
68         e.printStackTrace();
69     } finally{
70         try {
71             outputFile.close();
72         } catch (Exception e2) {
73             e2.printStackTrace();
74         }
75     }
76 }
77 
78 //将Properties类中的key-value对,存到xml文件中
79 public void printXML(){
80     Properties prop = new Properties();
81     prop.setProperty("content1", "there is no problem");
82     prop.setProperty("content2", "hello world");
83     
84     //PrintWriter outputFile = null;
85     FileOutputStream outputFile = null;
86     try {
87         //outputFile = new PrintWriter(new File("src/target.properties"));
88         outputFile = new FileOutputStream("src/target.xml");
89         prop.storeToXML(outputFile, "test target xml file");
90     } catch (Exception e) {
91         e.printStackTrace();
92     } finally{
93         try {
94             outputFile.close();
95         } catch (Exception e2) {
96             e2.printStackTrace();
97         }
98     }
99 }

输出到文件可使用Properties类的list方法,也可使用store方法。

输出后的内容如下

properties文件

#test target file
#Thu Mar 14 15:59:01 CST 2013
content2=hello world
content1=there is no problem

xml文件

1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
3 <properties>
4 <comment>test target xml file</comment>
5 <entry key="content2">hello world</entry>
6 <entry key="content1">there is no problem</entry>
7 </properties>

需要强调的是,对于xml文件的读取,仅支持如上代码所示的格式,此格式为properties.dtd中规定的。其他规则的xml配置将不能被正确识别且会抛出异常。而对于properties文件则没有那么多要求。

posted @ 2013-03-14 16:28  FlameRen  阅读(1866)  评论(3编辑  收藏  举报