一.簡介:
Properties是java中用的比較多的一個類,表示一個持久的屬性集。繼承於Hashtable,Properties可從流中加載,也可保存在流中。屬性列表中每個鍵極其對應值共同組成一個字符串。也即可以理解為KEY-VALUE的形式。
很多時候為了提高程序的應用效率,這類Properties文件可以保存在緩存系統中,因此,在操作一些特有數據時可以選擇使用Properties。在開發過程中,需要靈活使用。在本博文中將詳細介紹該類的使用,以及將Properties文件保存為XML文件和讀取XML文件中的KEY值等,由於在本案例中,代碼里面使用了詳細的注釋,因此,為了減少篇幅,僅留下對代碼理解有用的信息,所以不再過多的闡述。
本博文時本人的勞動成果所得,在博客園總結分享,歡迎轉載。在沒有作者的書面說明的情況下,必須保留本段聲明。作者:itRed 郵箱:it_red@sina.com 博客鏈接:http://www.cnblogs.com/itred GitHub鏈接:http://github.com/itred
二.案例:
- 新建項目:
在本DEMO中,不介紹文件的創建過程,直接采用手動創建。新建一個java項目,並且,在項目目錄下新建一個properties文件,用於存放我們即將操作的字符串(可以理解為key-value的鍵值對字符串)。
2. 添加一個key-value字符串:
主要思路是首先加載這個Properties文件,其中需要注意的是,這個寫入進去之后是必須要進行保存的,所以,不僅需要輸入流,更需要輸出流。這里利用setProperty進行鍵入key-value值,再利用store進行保存。關鍵代碼如下:
in = new BufferedInputStream(new FileInputStream(PROPS_PATH)); props.load(in); ou = new BufferedOutputStream(new FileOutputStream(PROPS_PATH)); props.setProperty(key, value); props.store(ou, "INSERT KEY-VALUE :" + key + "=" + value + "***");
3. 將map中的key-value全部寫入Properties中:
因為Map也是屬於Key-Value類型的鍵值對,所以和Properties可以進行近似的理解。要實現將map中的所有值寫入到Properties文件中,其實主要思路與上面是一樣的,只是在寫入時需要遍歷Map中的所有Key值和Value值。關鍵代碼如下:
in = new BufferedInputStream(new FileInputStream(PROPS_PATH)); props.load(in); os = new BufferedOutputStream(new FileOutputStream(PROPS_PATH)); for (Map.Entry<String, String> entry : map.entrySet()) { props.setProperty(entry.getKey(), entry.getValue()); } props.store(os, "Insert all map");
4. 遍歷Properties中的所有Key值和value值:
直接將其以流的形式加載到內存中,直接進行獲取所有值。其實,實現這個遍歷的方法還有很多,本例使用實現后的關鍵代碼如下:
in = new BufferedInputStream(new FileInputStream(PROPS_PATH)); props.load(in); Enumeration enu = props.propertyNames(); props.list(System.out); while (enu.hasMoreElements()) { System.out.println("(KEY)" + enu.nextElement() + "=(VALUE)" + props.getProperty((String) enu.nextElement())); }
5. 通過key值獲取map值:
因為和map差不多都是存放key-value形式的鍵值對字符串,因此很自然想到只取該文件中某個key的value值。僅僅需要props.getProperty(key)便可完成。
6. 將該Properties文件中的key-value保存為xml文件:
實現的思路是直接調用Properties類中的一個方法storeToXml()就可以順利完成。關鍵代碼如下:
in = new BufferedInputStream(new FileInputStream(PROPS_PATH)); props.load(in); ou = new BufferedOutputStream(new FileOutputStream(new File( "D:/test.xml"))); props.storeToXML(ou, "測試");
7. 從xml中獲取key的value值:
以流的形式加載xml文件,然后通過方法loadFromXML()讀入到properties,再通過getProperty()進行取值。
Properties props = new Properties(); String XML_PATH = "D:/test.xml"; InputStream in = null; try { in = new BufferedInputStream( new FileInputStream(new File(XML_PATH))); props.loadFromXML(in); String value = props.getProperty(key); return value; } catch (Exception e) { e.printStackTrace(); return ""; }
三.總結:
其實Properties的使用是很簡單的,但是對於從未使用過這個類的朋友而言,真心不知該從何下手。對此,本人也是深有體會。與其用一個方法查詢一個方法,倒還不如一次性對該Properties文件中的方法進行一個全面的了解,這樣,在以后的日子里,用起來也得心應手,十分方便。
本案例是本人的學習總結,代碼實現僅作功能性測試使用,不可用於生產過程,因為,不斷的進行流文件的加載的打開,在本例中未進行及時的關閉操作。所以,如果需要應用於實際生產中,需要在finally中,及時的關閉Properties文件。
另附本案例中所涉及到的案例源碼請點擊鏈接
作者:itRed 博客:http://itred.cnblogs.com
|