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:盤下寫入的文件以下:
 
 
 
 
呵呵,所有達到預期目標。
相關文章
相關標籤/搜索