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

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

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

    歡迎光臨郝學(xué)武的blog。

    淺談java.util.Properties

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

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

             一下是詳細的說明,希望能給大家?guī)韼椭?br />
    清單 1. 一組屬性示例

    foo=bar
    fu=baz




    將清單 1 裝載到 Properties 對象中后,您就可以找到兩個鍵( foo 和 fu )和兩個值( foo 的 bar 和 fu 的 baz )了。這個類支持帶 \u 的嵌入 Unicode 字符串,但是這里重要的是每一項內(nèi)容都當作 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 屬性文件
    這里沒有什么新內(nèi)容。 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> 標簽,后面是任意數(shù)量的 <entry> 標簽。對每一個 <entry> 標簽,有一個鍵屬性,輸入的內(nèi)容就是它的值。清單 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"));
      }
    }




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


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

    保存 XML 屬性
    新的 Properties 還有一個功能是將屬性存儲到 XML 格式的文件中。雖然 store() 方法仍然會創(chuàng)建一個類似 清單 1 所示的文件,但是現(xiàn)在可以用新的 storeToXML() 方法創(chuàng)建如 清單 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 中的程序產(chǎn)生的輸出如清單 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;
    /**
     * 實現(xiàn)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://www.tkk7.com/haoxuewu
    author = bbflyerwww
    school = jilinjianzhugongchengxueyuan

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

    Cost : 0


     

    Feedback

    # re: 淺談java.util.Properties   回復(fù)  更多評論   

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

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

    2008-05-16 14:12 by z
    s

    # re: 淺談java.util.Properties   回復(fù)  更多評論   

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

    # re: 淺談java.util.Properties   回復(fù)  更多評論   

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

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

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

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


    網(wǎng)站導(dǎo)航:
     

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

    Copyright © 陜西BOY

    主站蜘蛛池模板: 久9久9精品免费观看| 亚洲а∨精品天堂在线| jizz免费一区二区三区| 国产jizzjizz免费视频| 亚洲精品无播放器在线播放| 91在线视频免费91| 亚洲人成网站18禁止久久影院| 最近最新高清免费中文字幕 | 亚洲第一福利网站在线观看| 亚洲av无一区二区三区| 免费国产小视频在线观看| 色妞www精品视频免费看| 亚洲国产精品国产自在在线 | 亚洲Aⅴ在线无码播放毛片一线天 亚洲avav天堂av在线网毛片 | 亚洲精品无码中文久久字幕| 毛片a级毛片免费观看品善网| 亚洲熟妇AV一区二区三区浪潮| 国产美女无遮挡免费网站| 老外毛片免费视频播放| 国产亚洲一区二区三区在线不卡 | A级毛片成人网站免费看| 亚洲av无码乱码国产精品fc2| 国产精品免费高清在线观看| 亚洲免费在线观看视频| 国产成人无码免费视频97| www免费黄色网| 久久久亚洲欧洲日产国码aⅴ| 大地资源在线观看免费高清| 青草青草视频2免费观看| 亚洲精品高清国产一线久久| 国产成人精品免费视频动漫| 亚洲乱亚洲乱妇无码| 国产精品亚洲产品一区二区三区| 免费在线中文日本| 亚洲字幕AV一区二区三区四区| 亚洲国产成人久久一区WWW| 少妇人妻偷人精品免费视频| 亚洲日韩国产二区无码| 亚洲精品乱码久久久久久| 三年片在线观看免费大全| xvideos永久免费入口|