如鵬網(wǎng) 大學(xué)生計(jì)算機(jī)學(xué)習(xí)社區(qū)

          CowNew開源團(tuán)隊(duì)

          http://www.cownew.com 郵件請(qǐng)聯(lián)系 about521 at 163.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            363 隨筆 :: 2 文章 :: 808 評(píng)論 :: 0 Trackbacks

          作者楊中科是CowNew開源團(tuán)隊(duì)JDBMonitor項(xiàng)目組的開發(fā)人員。
          CowNew開源團(tuán)隊(duì)網(wǎng)站 http://www.cownew.com
          論壇 http://www.cownew.com/newpeng/
          轉(zhuǎn)載請(qǐng)注明此版權(quán)信息

          我們經(jīng)常需要將我們的程序運(yùn)行中的一些信息(比如在選項(xiàng)對(duì)話框中的設(shè)置)記錄下來,以做便再次運(yùn)行的時(shí)候不用再重寫填寫這些數(shù)據(jù)。這對(duì)改善軟件的人機(jī)可用性方面是很有用的。但是讓人失望的是,現(xiàn)在很多Java開源軟件在這一點(diǎn)做的很不好,每次運(yùn)行都要用戶去填寫那些配置文件。做為最好用的數(shù)據(jù)庫監(jiān)控、日志工具,JDBMonitor在這方面做的是非常好的,以它的Swing界面監(jiān)視器和數(shù)據(jù)庫日志記錄查詢窗口中所有的配置信息(例如遠(yuǎn)程服務(wù)器地址、端口、數(shù)據(jù)庫名稱、JDBC驅(qū)動(dòng)等等)都是被保存的,當(dāng)再次運(yùn)行的時(shí)候程序會(huì)自動(dòng)加載這些配置信息,所以使用起來相當(dāng)方便。
          我們接下來就來分析一下JDBMonitor是如何實(shí)現(xiàn)的。JDBMonitor的二進(jìn)制jar包和源代碼都可以從 http://www.cownew.com 下載得到。
          保存加載配置文件有多種方式,比如xml文件、properties文件等,采用這些保存方式的一個(gè)問題就是如果程序是以jar,war 包等方式發(fā)布的那么這些配置文件就不能放在包中,因?yàn)榘械奈募遣荒茉谶\(yùn)行時(shí)改動(dòng)的,只能放在磁盤的文件中,但是放在磁盤的文件中又很容易出現(xiàn)因?yàn)椴僮飨到y(tǒng)的差異、權(quán)限等問題造成程序的問題。JDBMonitor采用的則是JDK中的Preferences類來避免這些問題。
          JDK1.4中提供了Preferences類,在java.util.prefs包里面。Preferences類在不同的平臺(tái)中有不同的實(shí)現(xiàn)方式。比如在Windows平臺(tái)中,Preferences是將數(shù)據(jù)保存在注冊(cè)表中的。

          為了區(qū)分不同的應(yīng)用程序的參數(shù)項(xiàng),在建立Preferences時(shí)要指定一個(gè)節(jié)點(diǎn)路徑。
          Preferences是一個(gè)抽象類,提供了一系列靜態(tài)方法和抽象方法來操作參數(shù)項(xiàng):
          ?Preferences userData = Preferences.userNodeForPackage(this); //得到用戶配置節(jié)點(diǎn)
          ?Preferences sysData = Preferences.systemNodeForPackage(this); //得到系統(tǒng)配置節(jié)點(diǎn)。
          比如在windows中Preferences.userNodeForPackage代表得到 HKEY_CURRENT_USER\Software\JavaSoft\Prefs下的相對(duì)路徑
          Preferences.systemNodeForPackage代表得到? HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs下的相對(duì)路徑

          Preferences的讀取、存儲(chǔ)是非常容易的,存儲(chǔ)只要調(diào)用put***方法就可以,讀取調(diào)用get***即可,不同的put,get方法分別用于存取不同的數(shù)據(jù)類型,詳細(xì)信息可以參考JavaDoc。
          以JDBMonitor的Swing界面監(jiān)視器的連接對(duì)話框?yàn)槔秊榇蠹曳治觯蜷_com.cownew.JDBMonitor.listenerImpl.sckListenerClient.ConnectConfigDialog,saveConfig()和loadConfig()分別就是保存和讀取參數(shù)用了,這兩個(gè)方法會(huì)在超類中被調(diào)用。可以看到代碼實(shí)現(xiàn)非常簡(jiǎn)單:
          protected void saveConfig()
          ?{
          ? Preferences prefer = Preferences.userNodeForPackage(getClass());
          ? prefer.put(HOST_NAME,getHostName());
          ? prefer.putInt(PORT,getPort());
          ?}
          ?
          ?protected void loadConfig()
          ?{
          ? Preferences prefer = Preferences.userNodeForPackage(getClass());
          ? setHostName(prefer.get(HOST_NAME,""));
          ? setPort(prefer.getInt(PORT,9527));
          ?}

          posted on 2006-06-02 23:48 CowNew開源團(tuán)隊(duì) 閱讀(966) 評(píng)論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 田东县| 焦作市| 饶河县| 巴中市| 抚州市| 喀喇| 濉溪县| 马尔康县| 泊头市| 吉安市| 博爱县| 乐平市| 二连浩特市| 鄄城县| 鹿邑县| 宁都县| 迁西县| 漳平市| 体育| 工布江达县| 静宁县| 忻城县| 郑州市| 旬阳县| 青岛市| 湄潭县| 闸北区| 新田县| 前郭尔| 大连市| 汕尾市| 香河县| 哈尔滨市| 福建省| 濮阳县| 烟台市| 繁昌县| 巨野县| 南安市| 营口市| 红桥区|