<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) 方法。

             一下是詳細的說明,希望能給大家?guī)韼椭?br />
    清單 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() 方法仍然會創(chuàng)建一個類似 清單 1 所示的文件,但是現在可以用新的 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 中的程序產生的輸出如清單 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
    寫得不錯

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


    網站導航:
     

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

    Copyright © 陜西BOY

    主站蜘蛛池模板: 88av免费观看| 99久久精品国产免费| 免费无码又爽又刺激聊天APP| 亚洲人成在线电影| 亚洲免费视频网站| 亚洲综合色丁香麻豆| 四虎影视成人永久免费观看视频| 久久久久亚洲精品无码系列| 久久免费高清视频| 久久久久亚洲AV无码永不| 国产成人精品免费视频大| 亚洲中文字幕人成乱码| 成全视频在线观看免费高清动漫视频下载| 亚洲不卡1卡2卡三卡2021麻豆| 我想看一级毛片免费的| 亚洲AV成人精品一区二区三区| 亚洲成A人片在线观看中文 | 国产免费丝袜调教视频| 亚洲一区动漫卡通在线播放| 免费无码肉片在线观看| 色天使色婷婷在线影院亚洲| 亚洲性日韩精品一区二区三区 | 亚洲AV日韩AV无码污污网站| 免费午夜爽爽爽WWW视频十八禁 | 欧洲精品免费一区二区三区| 视频一区二区三区免费观看| 亚洲综合无码AV一区二区| 久久国产高潮流白浆免费观看| 精品国产成人亚洲午夜福利| 免费v片在线观看无遮挡| a毛片免费播放全部完整| 亚洲欧洲精品在线| 国产大片免费观看中文字幕| 成人黄网站片免费视频| 亚洲人成在线免费观看| 久久亚洲国产精品五月天婷| 在线免费中文字幕| 免费夜色污私人影院网站电影| 亚洲国产精品人久久| 日韩免费视频一区| 永久免费不卡在线观看黄网站|