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

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

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

    隨筆 - 154  文章 - 60  trackbacks - 0
    <2007年11月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    聲明:

    該blog是為了收集資料,認(rèn)識(shí)朋友,學(xué)習(xí)、提高技術(shù),所以本blog的內(nèi)容除非聲明,否則一律為轉(zhuǎn)載?。?br />
    感謝那些公開(kāi)自己技術(shù)成果的高人們?。?!

    支持開(kāi)源,尊重他人的勞動(dòng)!!

    常用鏈接

    留言簿(3)

    隨筆分類(lèi)(148)

    隨筆檔案(143)

    收藏夾(2)

    其他

    學(xué)習(xí)(技術(shù))

    觀察思考(非技術(shù))

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    利用 Java Properties 類(lèi)讀取配置文件信息

     

    在我們平時(shí)寫(xiě)程序的時(shí)候,有些參數(shù)是經(jīng)常改變的,而這種改變不是我們預(yù)知的。比如說(shuō)我們開(kāi)發(fā)了一個(gè)操作數(shù)據(jù)庫(kù)的模塊,在開(kāi)發(fā)的時(shí)候我們連接本地的數(shù)據(jù)庫(kù)那么 IP ,數(shù)據(jù)庫(kù)名稱,表名稱,數(shù)據(jù)庫(kù)主機(jī)等信息是我們本地的,要使得這個(gè)操作數(shù)據(jù)的模塊具有通用性,那么以上信息就不能寫(xiě)死在程序里。通常我們的做法是用配置文件來(lái)解決。

     

    各種語(yǔ)言都有自己所支持的配置文件類(lèi)型。比如 Python ,他支持 .ini 文件。因?yàn)樗麅?nèi)部有一個(gè) ConfigParser 類(lèi)來(lái)支持 .ini 文件的讀寫(xiě),根據(jù)該類(lèi)提供的方法程序員可以自由的來(lái)操作 .ini 文件。而在 Java 中, Java 支持的是 .properties 文件的讀寫(xiě)。 JDK 內(nèi)置的 java.util.Properties 類(lèi)為我們操作 .properties 文件提供了便利。

     

    一. .properties 文件的形式

    ==========================================================

    # 以下為服務(wù)器、數(shù)據(jù)庫(kù)信息

    dbPort = localhost

    databaseName = mydb

    dbUserName = root

    dbPassword = root

    # 以下為數(shù)據(jù)庫(kù)表信息

    dbTable = mytable

    # 以下為服務(wù)器信息

    ip = 192.168.0.9

    ······

     

    在上面的文件中我們假設(shè)該文件名為: test.properties 文件。其中 # 開(kāi)始的一行為注釋信息;在等號(hào)“ = ”左邊的我們稱之為 key ;等號(hào)“ = ”右邊的我們稱之為 value 。(其實(shí)就是我們常說(shuō)的鍵 - 值對(duì)) key 應(yīng)該是我們程序中的變量。而 value 是我們根據(jù)實(shí)際情況配置的。

     

    二. JDK 中的 Properties 類(lèi)

    Properties 類(lèi)存在于胞 Java.util 中,該類(lèi)繼承自 Hashtable ,它提供了幾個(gè)主要的方法:

    1. getProperty ( String  key) ,   用指定的鍵在此屬性列表中搜索屬性。也就是通過(guò)參數(shù) key ,得到 key 所對(duì)應(yīng)的 value

    2. load ( InputStream  inStream) ,從輸入流中讀取屬性列表(鍵和元素對(duì))。通過(guò)對(duì)指定的文件(比如說(shuō)上面的 test.properties 文件)進(jìn)行裝載來(lái)獲取該文件中的所有鍵 - 值對(duì)。以供 getProperty ( String  key) 來(lái)搜索。

    3. setProperty ( String  key, String  value) ,調(diào)用 Hashtable 的方法 put 。他通過(guò)調(diào)用基類(lèi)的put方法來(lái)設(shè)置 - 值對(duì)。

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

    5. clear () ,清除所有裝載的 - 值對(duì)。該方法在基類(lèi)中提供。

    有了以上幾個(gè)方法我們就可以對(duì) .properties 文件進(jìn)行操作了!

     

    三.代碼實(shí)例

     

     

    package configuration;

    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Properties;

    /** *//**
     * 讀取properties文件
     * 
    @author Qutr
     *
     
    */

    public class Configuration
    {
        
    private Properties propertie;
        
    private FileInputStream inputFile;
        
    private FileOutputStream outputFile;
        
        
    /** *//**
         * 初始化Configuration類(lèi)
         
    */

        
    public Configuration()
        
    {
            propertie 
    = new Properties();
        }

        
        
    /** *//**
         * 初始化Configuration類(lèi)
         * 
    @param filePath 要讀取的配置文件的路徑+名稱
         
    */

        
    public Configuration(String filePath)
        
    {
            propertie 
    = new Properties();
            
    try {
                inputFile 
    = new FileInputStream(filePath);
                propertie.load(inputFile);
                inputFile.close();
            }
     catch (FileNotFoundException ex) {
                System.out.println(
    "讀取屬性文件--->失??!- 原因:文件路徑錯(cuò)誤或者文件不存在");
                ex.printStackTrace();
            }
     catch (IOException ex) {
                System.out.println(
    "裝載文件--->失敗!");
                ex.printStackTrace();
            }

        }
    //end ReadConfigInfo()
        
        
    /** *//**
         * 重載函數(shù),得到key的值
         * 
    @param key 取得其值的鍵
         * 
    @return key的值
         
    */

        
    public String getValue(String key)
        
    {
            
    if(propertie.containsKey(key)){
                String value 
    = propertie.getProperty(key);//得到某一屬性的值
                return value;
            }

            
    else 
                
    return "";
        }
    //end getValue()
        
        
    /** *//**
         * 重載函數(shù),得到key的值
         * 
    @param fileName properties文件的路徑+文件名
         * 
    @param key 取得其值的鍵
         * 
    @return key的值
         
    */

        
    public String getValue(String fileName, String key)
        
    {
            
    try {
                String value 
    = "";
                inputFile 
    = new FileInputStream(fileName);
                propertie.load(inputFile);
                inputFile.close();
                
    if(propertie.containsKey(key)){
                    value 
    = propertie.getProperty(key);
                    
    return value;
                }
    else
                    
    return value;
            }
     catch (FileNotFoundException e) {
                e.printStackTrace();
                
    return "";
            }
     catch (IOException e) {
                e.printStackTrace();
                
    return "";
            }
     catch (Exception ex) {
                ex.printStackTrace();
                
    return "";
            }

        }
    //end getValue()
        
        
    /** *//**
         * 清除properties文件中所有的key和其值
         
    */

        
    public void clear()
        
    {
            propertie.clear();
        }
    //end clear();
        
        
    /** *//**
         * 改變或添加一個(gè)key的值,當(dāng)key存在于properties文件中時(shí)該key的值被value所代替,
         * 當(dāng)key不存在時(shí),該key的值是value
         * 
    @param key 要存入的鍵
         * 
    @param value 要存入的值
         
    */

        
    public void setValue(String key, String value)
        
    {
            propertie.setProperty(key, value);
        }
    //end setValue()
        
        
    /** *//**
         * 將更改后的文件數(shù)據(jù)存入指定的文件中,該文件可以事先不存在。
         * 
    @param fileName 文件路徑+文件名稱
         * 
    @param description 對(duì)該文件的描述
         
    */

        
    public void saveFile(String fileName, String description)
        
    {
            
    try {
                outputFile 
    = new FileOutputStream(fileName);
                propertie.store(outputFile, description);
                outputFile.close();
            }
     catch (FileNotFoundException e) {
                e.printStackTrace();
            }
     catch (IOException ioe){
                ioe.printStackTrace();
            }

        }
    //end saveFile()
        
        
    public static void main(String[] args)
        
    {
            Configuration rc 
    = new Configuration(".\config\test.properties");//相對(duì)路徑
            
            String ip 
    = rc.getValue("ipp");//以下讀取properties文件的值
            String host = rc.getValue("host");
            String tab 
    = rc.getValue("tab");
            
            System.out.println(
    "ip = " + ip + "ip-test leng = " + "ip-test".length());//以下輸出properties讀出的值
            System.out.println("ip's length = " + ip.length());
            System.out.println(
    "host = " + host);
            System.out.println(
    "tab = " + tab);

            Configuration cf 
    = new Configuration();
            String ipp 
    = cf.getValue(".\config\test.properties""ip");
            System.out.println(
    "ipp = " + ipp);
    //        cf.clear();
            cf.setValue("min""999");
            cf.setValue(
    "max""1000");
            cf.saveFile(
    ".\config\save.perperties""test");
            
    //        Configuration saveCf = new Configuration();
    //        saveCf.setValue("min", "10");
    //        saveCf.setValue("max", "1000");
    //        saveCf.saveFile(".\config\save.perperties");
            
        }
    //end main()
        
    }
    //end class ReadConfigInfo


    四.小結(jié)

    通過(guò)上面的例子不難看出,在Java中操作配置文件是非常簡(jiǎn)單的。在一個(gè)需要用到大量配置信息的模塊或系統(tǒng)里,我們有必要封裝一個(gè)專門(mén)的類(lèi)來(lái)共使用。通過(guò)最后的main函數(shù)調(diào)用,相信大家可以看出該類(lèi)的用法。不足指出希望大家多多指點(diǎn)。

    原文:http://mop9.blog.sohu.com/18009877.html

    posted on 2007-11-12 14:07 lk 閱讀(658) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): j2se 、j2ee
    主站蜘蛛池模板: 毛片在线看免费版| 亚洲高清国产拍精品青青草原| 午夜亚洲国产成人不卡在线| 亚洲AV无码国产精品麻豆天美| 日本亚洲免费无线码| a毛片成人免费全部播放| 久久久久亚洲AV无码专区首JN| 亚洲成AV人片在WWW| 免费看搞黄视频网站| 日本一道本高清免费| 亚洲无删减国产精品一区| 美女又黄又免费的视频| 亚洲精品在线免费观看| 国产男女猛烈无遮挡免费网站| 国产日韩成人亚洲丁香婷婷| 亚洲精品国产精品乱码不99| 国产亚洲精品线观看动态图| 亚洲高清无在码在线电影不卡| 亚洲精品第一国产综合亚AV| 中文在线观看永久免费| 最新猫咪www免费人成| 1000部羞羞禁止免费观看视频| 日韩黄色免费观看| 亚洲欧洲日韩不卡| 黄色毛片免费观看| 国产精品久久久久久久久久免费| 亚洲国产第一站精品蜜芽| 黄色网址免费在线| 免费无码AV片在线观看软件| 亚洲乱码精品久久久久..| 羞羞漫画小舞被黄漫免费| 97在线观免费视频观看 | 亚洲国产精品无码久久SM| 亚洲一级黄色大片| 8x8x华人永久免费视频| 成人免费一区二区三区在线观看| 亚洲春色在线视频| 一级毛片免费一级直接观看| 日韩a级毛片免费视频| 亚洲娇小性色xxxx| 精品无码AV无码免费专区|