對Properties類個人理解

前言

之前在使用框架的時候總是需要配置一個以.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);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容