<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    歡迎光臨郝學武的blog。

    淺談java.util.Properties

    Posted on 2008-05-15 17:41 陜西BOY 閱讀(2899) 評論(5)  編輯  收藏

            以前寫連接池的時候就用過Properties,就知道怎么用,但是不是很明白它都做什么用!今天偶的空閑,在網上轉了轉,收益不小,讓我對它有了進一步的認識。熟悉的就不用看了。
            如果不熟悉 java.util.Properties 類,那么現在告訴您它是用來在一個文件中存儲鍵-值對的,其中鍵和值是用等號分隔的。(如清單 1 所示)。最近更新的 java.util.Properties 類現在提供了一種為程序裝載和存儲設置的更容易的方法: loadFromXML(InputStream is) 和 storeToXML(OutputStream os, String comment) 方法。

             一下是詳細的說明,希望能給大家帶來幫助。

    清單 1. 一組屬性示例

    foo=bar
    fu=baz




    將清單 1 裝載到 Properties 對象中后,您就可以找到兩個鍵( foo 和 fu )和兩個值( foo 的 bar 和 fu 的 baz )了。這個類支持帶 \u 的嵌入 Unicode 字符串,但是這里重要的是每一項內容都當作 String 。

    清單 2 顯示了如何裝載屬性文件并列出它當前的一組鍵和值。只需傳遞這個文件的 InputStream 給 load() 方法,就會將每一個鍵-值對添加到 Properties 實例中。然后用 list() 列出所有屬性或者用 getProperty() 獲取單獨的屬性。

    清單 2. 裝載屬性

    import java.util.*;
    import java.io.*;

    public class LoadSample {
      public static void main(String args[]) throws Exception {
        Properties prop = new Properties();
        FileInputStream fis =
          new FileInputStream("sample.properties");
        prop.load(fis);
        prop.list(System.out);
        System.out.println("\nThe foo property: " +
            prop.getProperty("foo"));
      }
    }




    運行 LoadSample 程序生成如清單 3 所示的輸出。注意 list() 方法的輸出中鍵-值對的順序與它們在輸入文件中的順序不一樣。 Properties 類在一個散列表(hashtable,事實上是一個 Hashtable 子類)中儲存一組鍵-值對,所以不能保證順序。

    清單 3. LoadSample 的輸出

    -- listing properties --
    fu=baz
    foo=bar

    The foo property: bar




    XML 屬性文件
    這里沒有什么新內容。 Properties 類總是這樣工作的。不過,新的地方是從一個 XML 文件中裝載一組屬性。它的 DTD 如清單 4 所示。

    清單 4. 屬性 DTD

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- DTD for properties -->
    <!ELEMENT properties ( comment?, entry* ) >
    <!ATTLIST properties version CDATA #FIXED "1.0">
    <!ELEMENT comment (#PCDATA) >
    <!ELEMENT entry (#PCDATA) >
    <!ATTLIST entry key CDATA #REQUIRED>




    如果不想細讀 XML DTD,那么可以告訴您它其實就是說在外圍 <properties> 標簽中包裝的是一個 <comment> 標簽,后面是任意數量的 <entry> 標簽。對每一個 <entry> 標簽,有一個鍵屬性,輸入的內容就是它的值。清單 5 顯示了 清單 1中的屬性文件的 XML 版本是什么樣子的。

    清單 5. XML 版本的屬性文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
    <comment>Hi</comment>
    <entry key="foo">bar</entry>
    <entry key="fu">baz</entry>
    </properties>




    如果清單 6 所示,讀取 XML 版本的 Properties 文件與讀取老格式的文件沒什么不同。

    清單 6. 讀取 XML Properties 文件

    import java.util.*;
    import java.io.*;

    public class LoadSampleXML {
      public static void main(String args[]) throws Exception {
        Properties prop = new Properties();
        FileInputStream fis =
          new FileInputStream("sampleprops.xml");
        prop.loadFromXML(fis);
        prop.list(System.out);
        System.out.println("\nThe foo property: " +
            prop.getProperty("foo"));
      }
    }




    關于資源綁定的說明
    雖然 java.util.Properties 類現在除了支持鍵-值對,還支持屬性文件作為 XML 文件,不幸的是,沒有內置的選項可以將 ResourceBundle 作為一個 XML 文件處理。是的, PropertyResourceBundle 不使用 Properties 對象來裝載綁定,不過裝載方法的使用是硬編碼到類中的,而不使用較新的 loadFromXML() 方法。


    運行清單 6 中的程序產生與原來的程序相同的輸出,如 清單 2所示。

    保存 XML 屬性
    新的 Properties 還有一個功能是將屬性存儲到 XML 格式的文件中。雖然 store() 方法仍然會創建一個類似 清單 1 所示的文件,但是現在可以用新的 storeToXML() 方法創建如 清單 5 所示的文件。只要傳遞一個 OutputStream 和一個用于注釋的 String 就可以了。清單 7 展示了新的 storeToXML() 方法。

    清單 7. 將 Properties 存儲為 XML 文件

    import java.util.*;
    import java.io.*;

    public class StoreXML {
      public static void main(String args[]) throws Exception {
        Properties prop = new Properties();
        prop.setProperty("one-two", "buckle my shoe");
        prop.setProperty("three-four", "shut the door");
        prop.setProperty("five-six", "pick up sticks");
        prop.setProperty("seven-eight", "lay them straight");
        prop.setProperty("nine-ten", "a big, fat hen");
        FileOutputStream fos =
          new FileOutputStream("rhyme.xml");
        prop.storeToXML(fos, "Rhyme");
        fos.close();
      }
    }




    運行清單 7 中的程序產生的輸出如清單 8 所示。

    清單 8. 存儲的 XML 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
    <comment>Rhyme</comment>
    <entry key="seven-eight">lay them straight</entry>
    <entry key="five-six">pick up sticks</entry>
    <entry key="nine-ten">a big, fat hen</entry>
    <entry key="three-four">shut the door</entry>
    <entry key="one-two">buckle my shoe</entry>
    </properties>
    在這里改了一個例子:
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    /**
     * 實現properties文件的讀取
     * @author  haoxuewu
     */
    public class Test {
        public static void main(String[] args) {
            try {
                long start = System.currentTimeMillis();
                InputStream is = new FileInputStream("conf.properties");
                Properties p = new Properties();
                p.load(is);
                is.close();
                System.out.println("SIZE : " + p.size());
                System.out.println("homepage : " + p.getProperty("homepage"));
                System.out.println("author : " + p.getProperty("author"));
                System.out.println("school : " + p.getProperty("school"));
                long end = System.currentTimeMillis(); 
                System.out.println("Cost : " + (end - start));
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }
    }

    conf.properties
    # Configuration file
    homepage = http://m.tkk7.com/haoxuewu
    author = bbflyerwww
    school = jilinjianzhugongchengxueyuan

    Result
    SIZE:3
    homepage : http://m.tkk7.com/haoxuewu
    author : bbflyerwww
    school : jilinjianzhugongchengxueyuan

    Cost : 0


     

    Feedback

    # re: 淺談java.util.Properties   回復  更多評論   

    2008-05-16 12:12 by 網上買書
    有原理有實力,真的很不錯

    # re: 淺談java.util.Properties [未登錄]  回復  更多評論   

    2008-05-16 14:12 by z
    s

    # re: 淺談java.util.Properties   回復  更多評論   

    2008-05-17 13:24 by 隔葉黃鶯
    XML 的方式沒用過,可能一種使用習慣吧,要說就那么簡單的鍵值對,又沒有層次關系,真用不著拿 XML 存儲的。就這么一個層次的 XML 讀起來要比 properties 文件費勁的。

    # re: 淺談java.util.Properties   回復  更多評論   

    2008-05-17 22:59 by haoxuewu
    Properties不過是提供這樣一個接口方法,具體應用XML 存儲,只是它功能中的一個功能而已,具體用它做什么因個人的習慣而定。

    # re: 淺談java.util.Properties [未登錄]  回復  更多評論   

    2008-07-01 09:26 by liwei
    寫得不錯

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    posts - 17, comments - 65, trackbacks - 0, articles - 28

    Copyright © 陜西BOY

    主站蜘蛛池模板: 日本亚洲欧洲免费天堂午夜看片女人员 | 免费人人潮人人爽一区二区| 免费观看国产网址你懂的| 亚洲国产精品久久久天堂| 97超高清在线观看免费视频| 亚洲午夜AV无码专区在线播放| 日本一区二区三区在线视频观看免费 | 亚洲精华国产精华精华液| 好吊妞998视频免费观看在线| 亚洲日韩精品国产3区| 女性自慰aⅴ片高清免费| 亚洲精品成a人在线观看夫| 日韩午夜免费视频| 边摸边吃奶边做爽免费视频99| 免费国内精品久久久久影院| 日本视频免费观看| 亚洲av日韩综合一区在线观看| 91精品啪在线观看国产线免费| 亚洲乱码一区av春药高潮| 成人免费在线视频| 成年大片免费高清在线看黄| 亚洲人精品午夜射精日韩| 色欲国产麻豆一精品一AV一免费 | 青草青草视频2免费观看| 亚洲日韩欧洲乱码AV夜夜摸| 免费人成视频在线观看网站| 亚洲精品国产国语| 免费一级毛片不卡在线播放| 花蝴蝶免费视频在线观看高清版| 久久久亚洲精品视频| 最新猫咪www免费人成| 日韩免费码中文在线观看| 亚洲av日韩av高潮潮喷无码| 毛片免费vip会员在线看| 又粗又长又爽又长黄免费视频| 久久久久亚洲AV片无码| 成熟女人牲交片免费观看视频 | 亚洲国产成人精品久久| 免费夜色污私人影院在线观看| 麻豆精品成人免费国产片| 国产AV旡码专区亚洲AV苍井空|