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