java.util.Properties*

學習目標: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,則不會編譯在一塊兒)。還有若是加了‘/’,表示跟目錄,若是沒加則表示當前文件目錄,具體目錄結構,能夠查看下面這篇文章。

java讀取properties文件的幾種方法

相關文章
相關標籤/搜索