java.util.Properties类 学习笔记

java.util.Properties类 学习笔记
 
学习目标:
 
一、认识properties文件,理解其含义,会正确建立properties文件。
二、会使用java.util.Properties类来操做properties文件。
三、掌握相对路径,能正确书写一个properties文件的相对路径。
 
1、认识properties文件
 
一、properties文件是一个文本文件
二、properties文件的语法有两种,一种是注释,一种属性配置。
 注    释:前面加上#号
 属性配置:以“键=值”的方式书写一个属性的配置信息。
三、properties文件的一个属性配置信息值能够换行,但键不能够换行。值换行用“\”表示。
四、properties的属性配置键值先后的空格在解析时候会被忽略。
五、properties文件能够只有键而没有值。也能够仅有键和等号而没有值,但不管如何一个属性配置不能没有键。
 
 
例如,下面一个properties文件:
#正确的properties配置文件
aaa=1\
    11
b
bb    =     222
 
#格式良好的properties文件
aaa=111
bbb=222
 
2、解读java.util.Properties类
 
一、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对象。之后经过别的方式给里面添加“键值对”。
 
二、properties文件与Properties类的关系
经过properties文件能够填充Properties类。
也能够经过xml文件来填充Properties类。
能够经过绝对路径方式加载Properties文件信息,也能够使用相对路径加载。
 
3、实践
 
一、以绝对相对路径方式加载properties文件信息。
二、将Properties对象持久化到一个properties文件或者一个xml文件中。
三、修改并持久化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
*/

public class TestProperties {
         public static void main(String args[]) throws IOException {
                testProperties();
                test1();
        }

         public static void 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
         */

         public static void 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:盘下写入的文件以下:
 
 
 
 
呵呵,所有达到预期目标。
相关文章
相关标签/搜索