學習目標:java
一、認識properties文件,理解其含義,會正確建立properties文件。less
二、會使用java.util.Properties類來操做properties文件。學習
三、掌握相對路徑,能正確書寫一個properties文件的相對路徑。測試
1、認識properties文件ui
一、properties文件是一個文本文件this
二、properties文件的語法有兩種,一種是註釋,一種屬性配置。spa
注 釋:前面加上#號code
屬性配置:以「鍵=值」的方式書寫一個屬性的配置信息。orm
三、properties文件的一個屬性配置信息值能夠換行,但鍵不能夠換行。值換行用「\」表示。xml
四、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
上面文章轉載連接:java.util.Properties類 學習筆記
下面是實際項目裏用到的實例
首先目錄結構是這樣的
public static void testProperties() { Properties properties = this.loadProperties(); System.out.println(properties.getProperty("key")); } public static Properties loadProperties() { Properties properties = new Properties(); try { properties.load(Util.class.getClassLoader().getResourceAsStream("storm_config.properties")); } catch (FileNotFoundException e) { Log.error("找不到配置文件config.properties。", e); throw new RuntimeException("找不到配置文件config.properties。"); } catch (IOException e) { Log.error("獲取配置文件config.properties出錯", e); throw new RuntimeException("獲取配置文件config.properties出錯"); } catch (Exception e) { Log.error("獲取配置文件config.properties出錯", e); throw new RuntimeException("獲取配置文件config.properties出錯"); } return properties; }
關於.properties文件的路徑,這裏面有不少貓膩,在項目上右鍵新建Source Folder,名稱爲resources,這樣resource下面的.properties纔會和src下面的源代碼編譯在一塊兒,能夠打開Navigator窗口查看(若是是別的Folder,則不會編譯在一塊兒)。還有若是加了‘/’,表示跟目錄,若是沒加則表示當前文件目錄,具體目錄結構,能夠查看下面這篇文章。