java.util.Properties

来源:互联网 发布:杂志扫图软件 编辑:程序博客网 时间:2024/05/21 08:46

目标:

 

1、认识properties文件,理解其含义,会正确创建properties文件。

2、会使用java.util.Properties类来操作properties文件。

3、掌握相对路径,能正确书写一个properties文件的相对路径。

 

一、认识properties文件

 

1、properties文件是一个文本文件

2、properties文件的语法有两种,一种是注释,一种属性配置。

 注   释:前面加上#号

 属性配置:以“键=值”的方式书写一个属性的配置信息。

3、properties文件的一个属性配置信息值可以换行,但键不可以换行。值换行用“\”表示。

4、properties的属性配置键值前后的空格在解析时候会被忽略。

5、properties文件可以只有键而没有值。也可以仅有键和等号而没有值,但无论如何一个属性配置不能没有键。

 

 

例如,下面一个properties文件:

#正确的properties配置文件
aaa=1\
    11
b
bb    =     222

 

#格式良好的properties文件
aaa=111
bbb=222

 

二、解读java.util.Properties

 

1、Properties类的层次结构

java.lang.Object

  java.util.Dictionary<K,V>

      java.util.Hashtable<Object,Object>

          java.util.Properties

 

从层次机构看,Properties类实现了Map接口,因为HashTable实现了Map接口,因此Properties类本质上是一种简单的Map容器。

实际上,Properties类本身表示了对一种Map结构的操作。properties文件本身就表示了一个“键值对”的集合。因此,Properties类属于集合容器的家族,在使用前应该创建一个Properties的容器,实际上就是创建一个默认不带参数的Properties对象。以后通过别的方式给里面添加“键值对”。

 

2、properties文件与Properties类的关系

通过properties文件可以填充Properties类。

也可以通过xml文件来填充Properties类。

可以通过绝对路径方式加载Properties文件信息,也可以使用相对路径加载。

 

三、实践

 

1、以绝对相对路径方式加载properties文件信息。

2、将Properties对象持久化到一个properties文件或者一个xml文件中。

3、修改并持久化properties文件。

 

测试代码:

 

测试的properties文件:

#格式良好的properties文件
aaa=111
bbb=222

 

测试类:

package stu;

import java.io.*;
import java.util.Properties;

/**
* Properties
类测试
* User: xiaohui
* Date: 2008-11-4 21:04:54
*/

publicclass TestProperties {
        
publicstaticvoid main(String args[])throws IOException {
                testProperties();
                test1();
        }

        
publicstaticvoid testProperties()throws IOException {
                System.out.println(
"------------testProperties-------------");
                
//properties文件加载到输入字节流中
                InputStream is =
new FileInputStream("D:\\myprojects\\lession4\\src\\stu\\ttt.properties");
                
//创建一个Properties容器
                Properties prop =
new Properties();
                
//从流中加载properties文件信息
                prop.load(is);
                
//循环输出配置信息
                
for (Object key : prop.keySet()) {
                        System.out.println(key +
"=" + prop.get(key));
                }

                
//定义一个输出流
                OutputStream os1 =
new FileOutputStream("C:\\ttt.xml");
                OutputStream os2 =
new FileOutputStream("C:\\ttt.properties");

                
//Properties对象导出导出到xml
                prop.storeToXML(os1,
"我从properties导出的XML配置文件");
                
//Properties对象导出properties文件
                prop.store(os2,
"我从properties导出的XML配置文件");

                is.close();
                os1.close();
                os2.close();

                
//xml加载配置信息,填充Properties容器
                prop.loadFromXML(
new FileInputStream("C:\\ttt.xml"));
                
//循环输出配置信息
                System.out.println(
"我从导出的xml加载配置文件信息!");
                
for (Object key : prop.keySet()) {
                        System.out.println(key +
"=" + prop.get(key));
                }

                
//修改Properties对象,并持久化到一个文件
                prop.put(
"呵呵呵","嘎嘎嘎");
                OutputStream os3 =
new FileOutputStream("C:\\ttt1.xml");
                prop.storeToXML(os3,
"我从properties导出的XML配置文件");
                os3.close();
        }

        
/**
         *
以相对路径方式加载properties文件
         *
         * @throws IOException
         */

        
publicstaticvoid test1()throws IOException {
                System.out.println(
"------------test1-------------");
                Properties p =
new Properties();
                p.load(TestProperties.
class.getResourceAsStream("/stu/ttt.properties"));
                
for (Object key : p.keySet()) {
                        System.out.println(key +
"=" + p.get(key));
                }
        }
}

 

 

运行结果:

------------testProperties-------------
bbb=222
aaa=111
我从导出的xml加载配置文件信息!
bbb=222
aaa=111
------------test1-------------
bbb=222
aaa=111

Process finished with exit code 0

 

C:盘下写入的文件如下:

 

 

 

 

原创粉丝点击