前言
之前在使用框架的時候總是需要配置一個以.Properties結(jié)尾的文件。我只是按照教程一點(diǎn)點(diǎn)的復(fù)制粘貼,從來沒有深入思考過為什么將這個文件作為配置信息。后來知道了Properties類才知道原因。
簡介
- 概述
Properties不是一個IO流, 是一個集合。 是Hashtable的子類。
使用Properties主要是為了描述程序中的屬性列表文件。 有時候, 我們會將一些比較簡單的項(xiàng)目的配置信息, 以 .properties 格式的文件進(jìn)行存儲。 可以使用Properties對象讀寫.properties 文件。 - 注意
因?yàn)榇鎯Φ氖菍傩?屬性本來就是以鍵值對的方式存儲.這里的鍵和值都必須是字符串.所以不需要考慮泛型 - Properties作用
1.是HashTable的子類,所以也是鍵值對形式,保存,操作更容易
2.默認(rèn)鍵值都是字符串,所以不需要再考慮泛型
3.提供了一批好用的方法,方便使用(load(),store(),list()等)
基本使用
public static void fun1(){
Properties properties = new Properties();
properties.setProperty("first","java");//寫入first=java鍵值對
properties.setProperty("second","php");
properties.setProperty("third","python");
System.out.println(properties);//重寫了toString方法
properties.setProperty("first","haha");//key是唯一的,后面的值會將前面的值覆蓋
System.out.println(properties.get("first"));
//當(dāng)前的key在Properties中不存在時,會打印c
System.out.println(properties.getProperty("first1","c"));
System.out.println(properties);
}
獲取系統(tǒng)屬性
public static void fun2(){
//獲取系統(tǒng)屬性
Properties properties = System.getProperties();
System.out.println(properties);
//獲取所有鍵的名字
Set<String> set = properties.stringPropertyNames();
//遍歷得到值
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()){
String key = iterator.next();
System.out.println("key:"+key+"
value:"+properties.getProperty(key));
}
//第一次修改屬性信息
properties.setProperty("user.language","ch");
System.out.println(properties.getProperty("user.language"));//ch
//再獲取一次屬性信息
//思考?經(jīng)過第一次的修改,我們發(fā)現(xiàn)user.language的值變成了ch,再次獲取屬性,得到的仍然是ch
//系統(tǒng)屬性可以這樣很輕易的更改嗎?
//原理:會先到內(nèi)存中找屬性集合的對象,如果有,直接使用.如果沒有,會重新初始化一個新的對象,并獲取屬性集合.
Properties properties1 = System.getProperties();
System.out.println(properties1.getProperty("user.language"));//ch
}
實(shí)際應(yīng)用
加載一個 .properties 文件中的數(shù)據(jù),后綴名也可以不是properties.但是一般我們寫成properties,方便使用.
a.properties文件內(nèi)容
- 注意:
1.這里是修改過一次的文件
2.Propertes文件中對應(yīng)的也應(yīng)該是鍵值對
3.鍵和值之間可以是=或者空格或者冒號
4.默認(rèn)每行只寫一個鍵值對
#\u6539\u53D8\u4E86\u51B0\u51B0\u7684\u503C
#Fri Oct 16 17:52:51 IRKT 2020
name=我們
wss=06
zhaoliu=05
zhangsan=02
lisi=03
bingbing=buok
zhaoliu=04
- 讀取數(shù)據(jù)/遍歷數(shù)據(jù)/修改數(shù)據(jù)/寫回?cái)?shù)據(jù)
public static void fun3() throws IOException {
//讀取a.txt的內(nèi)容到Properties對象里面
Properties properties = new Properties();
//利用load方法將內(nèi)容從磁盤讀入Properties對象
properties.load(new FileReader("D:\\ideaProgram\\BigDataBK2001N06\\a.txt"));
//System.out.println(properties);
//改變內(nèi)容
properties.setProperty("bingbing","buok");
//使用store方法將數(shù)據(jù)寫入磁盤
properties.store(new FileWriter("D:\\ideaProgram\\BigDataBK2001N06\\a.txt"),"改變了冰冰的值");
//寫入控制臺---通過list
properties.list(System.out);
}