properties配置文件讀取操作總結【java筆記】


聲明:本文所有例子中的 properties 文件均放在 src 目錄下,ecclipse 軟件自動增加

一、基本概念

  1.1 

    properties文件,存儲格式 鍵=值。

    properties文件特點:

      1、鍵值對格式
      2、“ = ”等號后面,值前面,的空格,會自動忽略掉
      3、值后面的空格,不會忽略
      4、“ = ”等號后面的雙引號,不會忽略
      5、“ # ”井號后面內容,為注釋,忽略

  1.2 Java的 Properties 類 屬性映射(property map)

  是一種存儲鍵/值對的數據結構。屬性映射經常被用來存放配置信息。

  它有三個特性:

    1. 鍵和值斗志字符串

    2. 鍵/值對可以很容易地寫入文件或從文件讀出

    3. 用二級表存放默認值

  實現屬性映射的Java類被稱為 Properties(Java.util.Properties),此類是Java中比較重要的類,

  主要用於讀取Java的配置文件,各種語言都有自己所支持的配置文件,配置文件中很多變量是經常改變的,

  這樣做也是為了方便用戶,讓用戶能夠脫離程序本身去修改相關的變量設置,提高程序的可擴展性。

  此類是線程安全的:多個線程可以共享單個 Properties 對象而無需進行外部同步。

  構造方法:

    • Properties() 創建一個無默認值的空屬性列表。
    • Properties( Properties defaults ) 創建一個帶有指定默認值的空屬性列表。

  它提供了幾個主要的方法:
    getProperty ( String key):用指定的鍵在此屬性列表中搜索屬性。也就是通過參數 key ,得到 key 所對應的 value。

    load ( InputStream inStream):從輸入流中讀取屬性列表(鍵和元素對)。通過對指定的文件(比如說上面的 test.properties 文件)進行裝載來獲取該文件中的所有鍵 - 值對。以供 getProperty ( String key) 來搜索。

    setProperty ( String key, String value) :底層調用 Hashtable 的方法 put 。他通過調用基類的put方法來設置 鍵 - 值對。

    store ( OutputStream out, String comments):以適合使用 load 方法加載到 Properties 表中的格式,將此 Properties 表中的屬性列表(鍵和元素對)寫入輸出流。與 load 方法相反,該方法將鍵 - 值對寫入到指定的文件中去。

    clear ():清除所有裝載的 鍵 - 值對。該方法在基類中提供。

    注意:因為 Properties 繼承於 Hashtable,所以可對 Properties 對象應用 put 和 putAll 方法。但不建議使用這兩個方法,因為它們允許調用者插入其鍵或值不是 String 的項。相反,應該使用 setProperty 方法。

    如果在“不安全”的 Properties 對象(即包含非 String 的鍵或值)上調用 store 或 save 方法,則該調用將失敗。

    類似地,如果在“不安全”的 Properties 對象(即包含非 String 的鍵)上調用 propertyNames 或 list 方法,則該調用將失敗。

二、Java讀取Properties文件的方法

  2.1 Java虛擬機(JVM)有自己的系統配置文件(system.properties)

//獲取JVM的系統屬性  
import java.util.Properties;  
public class ReadJVM {  
    public static void main(String[] args) {  
        Properties pps = System.getProperties();  
        pps.list(System.out);  
    }  
}  

 

  2.2 使用 J2SE API 讀取 Properties 文件的六種方法

  方法一:java.util.Properties類的 load() 方法

    InputStream in = new BufferedInputStream(new FileInputStream(name));
    Properties p = new Properties();
    p.load(in);

  /**
     * 注意:配置文件一定要放到項目的根目錄。
     */
    @Test
    public void run1() {
        try {
            FileInputStream is = new FileInputStream("src/my-ini.properties");
            Properties pop = new Properties();
            try {
                pop.load(is);
            } catch (IOException e) {
                e.printStackTrace();
            }
            Enumeration em = pop.propertyNames();
            while(em.hasMoreElements()) {
                String key = (String) em.nextElement();
                String value = pop.getProperty(key);
                System.out.println(key+"="+value);
            }
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

  方法二:使用class變量的getResourceAsStream()方法

    InputStream in = JProperties.class.getResourceAsStream(name);
    Properties p = new Properties();
    p.load(in);

    /**
     * 注意:配置文件一定要放到當前目錄下。
     * (目錄層次也可以從src下面的文件夾開始但不必包含src,且不必包含反斜杠開頭。) 
     * 本方法在 PropertiesDemo1 類中
     */
    @Test
    public void run2() {
        Properties pop = new Properties();
        try{
            InputStream in = PropertiesDemo1.class.getResourceAsStream("/my-ini.properties");
            pop.load(in);
        }catch(Exception ex) {
            ex.printStackTrace();
        }
        Enumeration em = pop.propertyNames();
        while(em.hasMoreElements()) {
            String key = (String) em.nextElement();
            String value = pop.getProperty(key);
            System.out.println(key+"="+value);
        }
        
        
    }

  方法三:使用 class.getClassLoader() 所得到的 java.lang.ClassLoader 的 getResourceAsStream() 方法

    InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name);
    Properties p = new Properties();
    p.load(in);

  /**
     * 注意:
     * 配置文件一定要放在 bin 目錄下
   * 注意 eclipse 軟件自動將src中的配置文件復制到 bin 目錄下
*/ @Test public void run3() { Properties pop = new Properties(); try{ InputStream in = PropertiesDemo1.class.getClassLoader().getResourceAsStream("my-ini.properties"); pop.load(in); }catch(Exception ex) { ex.printStackTrace(); } Enumeration em = pop.propertyNames(); while(em.hasMoreElements()) { String key = (String) em.nextElement(); String value = pop.getProperty(key); System.out.println(key+"="+value); } }

  方法四:使用 java.lang.ClassLoader 類的 getSystemResourceAsStream() 靜態方法

    InputStream in = ClassLoader.getSystemResourceAsStream(name);
    Properties p = new Properties();
    p.load(in);

   /**
     * 注意:
     * 配置文件一定要放在 bin 目錄下
     */
    @Test
    public void run4() {
        Properties pop = new Properties();
        try{
            InputStream in = ClassLoader.getSystemResourceAsStream("my-ini.properties");
            pop.load(in);
        }catch(Exception ex) {
            ex.printStackTrace();
        }
        Enumeration em = pop.propertyNames();
        while(em.hasMoreElements()) {
            String key = (String) em.nextElement();
            String value = pop.getProperty(key);
            System.out.println(key+"="+value);
        }
    }

  方法五:使用 java.util.ResourceBundle 類的 getBundle() 方法

    ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());

  /**
     * 注意:
     * 配置文件一定要放在 bin 目錄下
     */
    @Test
    public void run5() {
        ResourceBundle rs = ResourceBundle.getBundle("my-ini");
        
        String driver = rs.getString("driver");
        String url = rs.getString("url");
        String user = rs.getString("user");
        String password = rs.getString("password");
                
        System.out.println("driver="+driver);
        System.out.println("url="+url);
        System.out.println("user="+user);
        System.out.println("password="+password);
    }

  方法六:使用 java.util.PropertyResourceBundle 類的構造函數

  @Test
    public void run6() {
        File file = new File("src/my-ini.properties");
        try {
            BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
            try {
                PropertyResourceBundle prb = new PropertyResourceBundle(in);
                
                String driver = prb.getString("driver");
                String url = prb.getString("url");
                String user = prb.getString("user");
                String password = prb.getString("password");
                
                System.out.println("driver="+driver);
                System.out.println("url="+url);
                System.out.println("user="+user);
                System.out.println("password="+password);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

 

引用博文: 

JAVA操作properties配置文件——總結(Locale&ResourceBundle& PropertyResourceBundle(http://blog.csdn.net/fanxiaobin577328725/article/details/52071310)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM