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

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

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

    hello world

    隨筆 - 2, 文章 - 63, 評論 - 0, 引用 - 0
    數據加載中……

    Java Properties 類讀取配置文件信息

    ?Java Properties 類讀取配置文件信息?? 文章指數:0??CSDN Blog推出文章指數概念,文章指數是對Blog文章綜合評分后推算出的,綜合評分項分別是該文章的點擊量,回復次數,被網摘收錄數量,文章長度和文章類型;滿分100,每月更新一次。

    在我們平時寫程序的時候,有些參數是經常改變的,而這種改變不是我們預知的。比如說我們開發了一個操作數據庫的模塊,在開發的時候我們連接本地的數據庫那么IP,數據庫名稱,表名稱,數據庫主機等信息是我們本地的,要使得這個操作數據的模塊具有通用性,那么以上信息就不能寫死在程序里。通常我們的做法是用配置文件來解決。

    各種語言都有自己所支持的配置文件類型。比如Python,他支持.ini文件。因為他內部有一個ConfigParser類來支持.ini文件的讀寫,根據該類提供的方法程序員可以自由的來操作.ini文件。而在Java中,Java支持的是.properties文件的讀寫。JDK內置的java.util.Properties類為我們操作.properties文件提供了便利。

    一..properties文件的形式==========================================================

    ?

    #以下為服務器、數據庫信息

    dbPort = localhost

    databaseName = mydb

    dbUserName = root

    dbPassword = root

    #以下為數據庫表信息

    dbTable = mytable

    #以下為服務器信息

    ip = 192.168.0.9

    ······

    在上面的文件中我們假設該文件名為:test.properties文件。其中#開始的一行為注釋信息;在等號“=”左邊的我們稱之為key;等號“=”右邊的我們稱之為value。(其實就是我們常說的鍵-值對)key應該是我們程序中的變量。而value是我們根據實際情況配置的。

    二.JDK中的PropertiesProperties類存在于胞Java.util中,該類繼承自Hashtable,它提供了幾個主要的方法:1.getProperty(String?key)?用指定的鍵在此屬性列表中搜索屬性。也就是通過參數key,得到key所對應的value

    ?

    ?

    2.load(InputStream?inStream),從輸入流中讀取屬性列表(鍵和元素對)。通過對指定的文件(比如說上面的test.properties文件)進行裝載來獲取該文件中的所有鍵-值對。以供getProperty(String?key)來搜索。3.setProperty(String?key, String?value),調用Hashtable的方法put。他通過調用基類的put方法來設置-值對。

    ?

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

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

    有了以上幾個方法我們就可以對.properties文件進行操作了!

    三.代碼實例

    ?
    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類
    ?????
    */

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

    ????
    ????
    /**
    ?????*?初始化Configuration類
    ?????*?
    @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(
    "讀取屬性文件--->失敗!-?原因:文件路徑錯誤或者文件不存在");
    ????????????ex.printStackTrace();
    ????????}
    ?catch?(IOException?ex)?{
    ????????????System.out.println(
    "裝載文件--->失敗!");
    ????????????ex.printStackTrace();
    ????????}

    ????}
    //end?ReadConfigInfo(...)
    ????
    ????
    /**
    ?????*?重載函數,得到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(...)
    ????
    ????
    /**
    ?????*?重載函數,得到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();
    ????
    ????
    /**
    ?????*?改變或添加一個key的值,當key存在于properties文件中時該key的值被value所代替,
    ?????*?當key不存在時,該key的值是value
    ?????*?
    @param?key?要存入的鍵
    ?????*?
    @param?value?要存入的值
    ?????
    */

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

    ????
    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");//相對路徑
    ????????
    ????????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

    四.小結 通過上面的例子不難看出,在Java中操作配置文件是非常簡單的。在一個需要用到大量配置信息的模塊或系統里,我們有必要封裝一個專門的類來共使用。通過最后的main函數調用,相信大家可以看出該類的用法。不足指出希望大家多多指點。

    ?

    ?Java properties文件的操作?




    ?????? java中的properties文件是一種配置文件,主要用于表達配置信息,文件類型為*.properties,格式為文本文件,文件的內容是格式是 "鍵=值"的格式,在properties文件中,可以用"#"來作注釋,properties文件在Java編程中用到的地方很多,操作很方便。下面是 一個操作java properties文件的例子,給出了操作方法和properties文件。從中可以看到如何讀取properties文件,并應用讀取出來的值,是學 習操作properties文件的好例子。

    一、properties文件

    IcisReport.properties
    ------------------------------------------------------
    ###################################################
    #?? 工商報表應用IcisReport的配置文件?????????????? #
    #?? 作者:雷智民?????????????????????????????????? #
    #?? 日期:2006年11月21日?????????????????????????? #
    ###################################################
    #
    #?? 說明:業務系統TopIcis和報表系統IcisReport是分離的
    #?? 可分開部署到不同的服務器上,也可以部署到同一個服務
    #?? 器上;IcisReprot作為獨立的web應用程序可以使用任何
    #?? 的Servlet容器或者J2EE服務器部署并單獨運行,也可以
    #?? 通過業務系統的接口調用作為業務系統的一個庫來應用.
    #
    #?? IcisReport的ip
    IcisReport.server.ip=192.168.3.143
    #?? IcisReport的端口
    IcisReport.server.port=8080
    #?? IcisReport的上下文路徑
    IcisReport.contextPath=/IcisReport

    ------------------------------------------------------

    ?

    二、操作properties文件的java方法

    ?

    下面是一個操作properties文件的方法

    ------------------------------------------------------
    ??? /**
    ???? * @return 獲取IcisReport報表應用的URL
    ???? */
    ??? private String getIcisReportURL() {
    ??????? String icisReportURL = "";????????????? //IcisReport報表應用的URL
    ??????? String icisReportServerIP = "";???????? //IcisReport服務器的IP
    ??????? String icisReportServerPort = "";?????? //IcisReport服務器的服務端口
    ??????? String icisReportContextPath="";??????? //IcisReport應用的ContextPath

    ??????? Properties prop = new Properties();
    ??????? InputStream in;
    ??????? try {
    ??????????? in = getClass().getResourceAsStream("/IcisReport.properties");
    ??????????? prop.load(in);
    ??????????? Set keyValue = prop.keySet();
    ??????????? for (Iterator it = keyValue.iterator(); it.hasNext();) {
    ??????????????? String key = (String) it.next();
    ??????????????? if (key.equals("IcisReport.server.ip")) {
    ??????????????????? icisReportServerIP = (String) prop.get(key);
    ??????????????? } else if (key.equals("IcisReport.server.port")) {
    ??????????????????? icisReportServerPort = (String) prop.get(key);
    ??????????????? } else if (key.equals("IcisReport.contextPath")){
    ??????????????????? icisReportContextPath=(String) prop.get(key);
    ??????????????? }
    ??????????? }
    ??????? } catch (Exception e) {
    ??????????? log.error("IO讀取出錯,找不到IcisReport.properties!");
    ??????? }

    ??????? if (icisReportServerIP.trim().equals("")) {
    ??????????? log.error("請檢查配置文件IcisReport.properties中的IcisReport.server.ip項的值是否正確!");
    ??????? }
    ??????? if (icisReportServerPort.trim().equals("")) {
    ??????????? log.error("請檢查配置文件IcisReport.properties中的IcisReport.server.port項的值是否正確!");
    ??????? }
    ??????? if (icisReportServerPort.trim().equals("")) {
    ??????????? log.error("請檢查配置文件IcisReport.properties中的IcisReport.server.port項的值是否正確!");
    ??????? }

    ??????? icisReportURL = "http://" + icisReportServerIP.trim() + ":" + icisReportServerPort.trim()+icisReportContextPath.trim();
    ??????? log.info("獲取的icisReportURL=" + icisReportURL);
    ??????? return icisReportURL;
    ??? }

    ------------------------------------------------------

    ?

    總 結:java的properties文件需要放到classpath下面,這樣程序才能讀取到,有關classpath實際上就是java類或者庫的存放 路徑,在java工程中,properties放到class文件一塊。在web應用中,最簡單的方法是放到web應用的WEB-INF\classes 目錄下即可,也可以放在其他文件夾下面,這時候需要在設置classpath環境變量的時候,將這個文件夾路徑加到classpath變量中,這樣也也可 以讀取到。在此,你需要對classpath有個深刻理解,classpath絕非系統中刻意設定的那個系統環境變量,WEB-INF\classes其 實也是,java工程的class文件目錄也是。


    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2104561

    posted on 2008-03-28 21:33 聽風 閱讀(301) 評論(0)  編輯  收藏 所屬分類: JAVA

    主站蜘蛛池模板: 亚洲第一精品在线视频| 亚洲午夜久久久久久尤物| 中文字幕免费不卡二区| 亚洲精品在线不卡| 日本一道在线日本一道高清不卡免费 | 久久精品无码免费不卡| 亚洲色欲色欲综合网站| 日本无吗免费一二区| 国内精品久久久久影院免费| 亚洲欧洲日韩国产一区二区三区| 四虎亚洲国产成人久久精品| 亚洲视频在线免费观看| 国产午夜亚洲精品不卡免下载| 亚洲国产精品特色大片观看完整版| 91免费精品国自产拍在线不卡| 九九免费精品视频在这里| 亚洲卡一卡2卡三卡4麻豆| 亚洲日韩国产成网在线观看| 在线a免费观看最新网站| 老司机福利在线免费观看| 亚洲成a人不卡在线观看| 夜夜春亚洲嫩草影院| 日本午夜免费福利视频| 99久久久国产精品免费蜜臀| 日韩一级片免费观看| 亚洲 欧洲 自拍 另类 校园| 亚洲日韩乱码中文无码蜜桃臀网站 | 91网站免费观看| 成人免费ā片在线观看| 亚洲JIZZJIZZ妇女| 久久亚洲精品中文字幕| 亚洲最大av无码网址| 免费观看美女裸体网站| 亚洲毛片免费观看| 99久久国产精品免费一区二区 | 免费不卡在线观看AV| 国产精品免费αv视频| 羞羞网站在线免费观看| 亚洲最大天堂无码精品区| 亚洲视频精品在线| 久久夜色精品国产亚洲|