<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 閱讀(2891) 評論(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://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   回復  更多評論   

    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

    主站蜘蛛池模板: 免费看a级黄色片| 亚洲免费黄色网址| 亚洲欧洲国产成人综合在线观看 | 国产成人免费视频| 国产av无码专区亚洲av果冻传媒| 综合偷自拍亚洲乱中文字幕| 成人毛片免费观看视频在线| 亚洲欧洲无卡二区视頻| 日本无吗免费一二区| 国产99久久亚洲综合精品| 免费在线观看黄色毛片| 本道天堂成在人线av无码免费| 不卡精品国产_亚洲人成在线| 免费毛片在线看不用播放器| 亚洲AV无码精品色午夜在线观看| 日本一卡精品视频免费| 亚洲伊人久久大香线焦| 成人免费男女视频网站慢动作| 亚洲欧美日韩国产精品一区| 国产在线不卡免费播放| 一级做a免费视频观看网站| 国精无码欧精品亚洲一区 | 免费一级不卡毛片| 亚洲第一香蕉视频| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲国产精品免费观看| 免费大香伊蕉在人线国产| av网站免费线看| 中文字幕亚洲色图| 日本不卡免费新一二三区| 国产免费久久精品丫丫| 亚洲综合男人的天堂色婷婷| 在线不卡免费视频| 一个人免费视频观看在线www| 亚洲丰满熟女一区二区v| 亚洲AⅤ优女AV综合久久久| 国产成人一区二区三区视频免费| 日韩亚洲不卡在线视频中文字幕在线观看| 免费一级毛片在线播放| 亚洲a一级免费视频| 色吊丝免费观看网站|