love fish大鵬一曰同風(fēng)起,扶搖直上九萬里

          常用鏈接

          統(tǒng)計

          積分與排名

          friends

          link

          最新評論

          在Java中獲取系統(tǒng)屬性(轉(zhuǎn))

          ?Java語言以其面向?qū)ο蟆⒖缙脚_、可移植性好、安全性高等優(yōu)點,受到眾多編程人員的青睞,越來越多的人將其作為應(yīng)用軟件開發(fā)語言的首選。?
          在Java應(yīng)用程序運行時,特別是需要在跨平臺工作環(huán)境下運行時,需要確定操作系統(tǒng)類型、用戶JDK版本和用戶工作目錄等隨工作平臺變化的信息,來保證程序正確運行。一般情況下,可以利用JDK提供的系統(tǒng)屬性類(Properties)中的方法,快速地獲取工作環(huán)境信息。另外,程序開發(fā)人員還可以定義與應(yīng)用程序相關(guān)的系統(tǒng)屬性文件,在用戶程序執(zhí)行過程中動態(tài)地加載程序員定義的屬性文件來控制程序運行。?
          本文通過對系統(tǒng)屬性類的分析,結(jié)合實際例子介紹如何定義系統(tǒng)屬性文件,并討論安全策略文件的定義。?
          屬性類?Java?Properties類的繼承關(guān)系如下:?
          java.lang.Object?
          +--java.util.Dictionary?
          +--java.util.Hashtable?
          +--java.util.Properties?
          在應(yīng)用程序開始執(zhí)行時,程序首先讀取系統(tǒng)的默認(rèn)屬性。如果定義了用戶屬性文件,則應(yīng)用程序加載該屬性文件。程序運行過程中可以根據(jù)執(zhí)行情況動態(tài)地修改屬性定義,并在程序結(jié)束運行前,保存屬性文件。?
          獲取屬性的方法:?
          ●contains(Object?value)、containsKey(Object?key):如果給定的參數(shù)或?qū)傩躁P(guān)鍵字在屬性表中有定義,該方法返回True,否則返回False;?
          ●getProperty(String?key)、getProperty(String?key,?String?default):根據(jù)給定的屬性關(guān)鍵字獲取關(guān)鍵字值;?
          ●list(PrintStream?s)、list(PrintWriter?w):?在輸出流中輸出屬性表內(nèi)容;?
          ●size():返回當(dāng)前屬性表中定義的屬性關(guān)鍵字個數(shù)。?
          設(shè)置屬性的方法:?
          ●put(Object?key,?Object?value)?:向?qū)傩员碇凶芳訉傩躁P(guān)鍵字和關(guān)鍵字的值;?
          ●remove(Object?key)?:從屬性表中刪除關(guān)鍵字。?
          獲取系統(tǒng)屬性?
          系統(tǒng)屬性是指與用戶程序相關(guān)的操作系統(tǒng)配置信息以及軟件信息。通常與用戶程序相關(guān)的屬性關(guān)鍵字包括:?
          ●file.separator?:?文件分隔符,?Windows環(huán)境下為“",Unix環(huán)境下為“/”;?
          ●user.home?:用戶主目錄;?
          ●java.home?:Java實時運行環(huán)境的安裝目錄;?
          ●java.ext.dirs?:JDK的安裝目錄;?
          ●os.name?:操作系統(tǒng)名稱;?
          ●user.name?:用戶登錄名稱;?
          ●os.version?:操作系統(tǒng)版本;?
          ●path.separator?:當(dāng)前操作系統(tǒng)的路徑分隔符;?
          ●user.dir?:當(dāng)前用戶程序所在目錄。?
          下面結(jié)合例子說明獲取系統(tǒng)屬性的方法。?
          /*getSystemProperties.java*/?
          import?java.util.Properties;??
          public?class?getSystemProperties?
          {?
          public?static?void?main(String?args[])?
          {??
          //通過獲得系統(tǒng)屬性構(gòu)造屬性類?prop?
          Properties?prop?=?new?Properties(??
          System.getProperties()?);?
          //在標(biāo)準(zhǔn)輸出中輸出系統(tǒng)屬性的內(nèi)容?
          prop.list(System.out);?
          }?
          //根據(jù)獲取的系統(tǒng)屬性確定程序執(zhí)行流程?
          ……?
          }?
          上述程序執(zhí)行后,在Windows環(huán)境中產(chǎn)生類似如下的輸出:?
          user.home=C:WIN95?
          java.home=D:JDK1.2JRE?
          java.ext.dirs=D:JDK1.2?
          os.name=Windows?95?
          user.name=Office?
          java.vm.name=Classic?VM?
          os.version=4.10?
          path.separator=;?
          file.separator=?
          user.dir=D:JavaTest?
          屬性文件的操作方法?
          Java程序開發(fā)人員可以通過定義屬性文件來設(shè)置程序運行的參數(shù)。屬性文件是程序外部文件,在應(yīng)用程序初始運行時,可以通過讀取屬性文件來獲取有關(guān)程序運行的參數(shù)。例如,在程序運行時需要在程序外部控制程序的執(zhí)行流程,這時可以通過定義屬性文件的方法達(dá)到目的。下面結(jié)合例子說明屬性文件的操作方法:?
          /*PropertyFile.java*/?
          //引入相關(guān)類?
          import?java.io.*;?
          import?java.util.Properties;?
          public?class?PropertyFile?
          {?
          //定義文件輸入和輸出流?
          static?FileInputStream?fis;?
          static?FileOutputStream?fos;?
          public?static?void?main(String?args[])?
          {??
          //生成新的屬性對象?
          Properties?prop?=?new?Properties();?
          try?
          {??
          //生成文件輸入和輸出流,輸入流指向用戶已經(jīng)定義的屬性文件,輸出流指向由應(yīng)用程序新定義的屬性文件?
          fis?=?new?FileInputStream?
          (“firstProp.txt”);?
          fos?=?new?FileOutputStream?
          (“secondProp.txt”);?
          }?
          catch(FileNotFoundException?e)?
          {?
          System.out.println(“Cannot?create?the?file?stream”);?
          }?
          try?
          {?
          //從輸入文件加載系統(tǒng)屬性?
          prop.load(fis);?
          //根據(jù)程序執(zhí)行情況更改屬性關(guān)鍵字的值?
          prop.put(“Switch”,“1”);?
          //輸出新屬性文件secondProp.txt?
          prop?.save?(?fos?,“--?a?new?properties?file-”);?
          }?
          catch(IOException?e)?
          {?
          System.out.println(“Exception?in?repleace?the?keyword”);?
          }?
          }?
          }?
          在程序執(zhí)行之前,用戶必須首先定義屬性文件firstProp.txt,該文件內(nèi)容如下:?
          Switch=?0?
          Version=?1.0?
          Directory=?JavaTest?
          程序運行后,輸出新的屬性文件secondProp.txt,該文件內(nèi)容如下(注意觀察兩個文件關(guān)鍵字Switch內(nèi)容的區(qū)別):?
          #--a?new?properties?file--?
          #Sun?Mar?11?21:22:40?CST?2001?
          Switch=?1?
          Version=?1.0?
          Directory=?JavaTest?
          從上例可以看出,通過JDK提供的屬性類Properties可以方便地在程序外部對應(yīng)用程序的執(zhí)行流程進(jìn)行控制,從而簡化了編程難度,使程序流程可控性更好。?
          安全策略文件?
          Java提供的應(yīng)用程序環(huán)境的安全策略,使得不同的代碼對系統(tǒng)資源擁有不同的訪問許可。Java應(yīng)用程序安全策略由Policy對象來表達(dá),通過定義安全策略文件來實現(xiàn)。Java?1.2的安全策略文件分為三級:系統(tǒng)安全策略文件、用戶安全策略文件和缺省安全策略文件。當(dāng)Java應(yīng)用程序啟動后,按照先后順序加載安全策略內(nèi)容。下面結(jié)合典型的安全策略文件內(nèi)容對安全策略文件的定義進(jìn)行說明:?
          grant?
          {??
          //對系統(tǒng)和用戶目錄設(shè)置“讀”的權(quán)限?
          permission?java.util.PropertyPermission?“user.dir”,?
          “read”;?
          permission?java.util.PropertyPermission?“user.home”,“read”;?
          permission?java.util.PropertyPermission?“java.home”,“read”;?
          permission?java.util.PropertyPermission?“java.class.?
          path”,“read”;?
          permission?java.util.PropertyPermission?“user.name”,“read”;?
          //其他安全策略內(nèi)容?
          };?
          上述安全策略文件定義了應(yīng)用程序?qū)τ脩裟夸洝⒂脩舻卿浤夸洝DK安裝目錄、用戶名稱等系統(tǒng)內(nèi)容具有讀的權(quán)限。

          posted on 2006-06-16 14:47 liaojiyong 閱讀(190) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 大荔县| 章丘市| 安丘市| 弥渡县| 六盘水市| 石河子市| 邵阳市| 乐亭县| 嘉兴市| 屏东市| 南宫市| 兰溪市| 建始县| 河池市| 会泽县| 加查县| 军事| 东光县| 科技| 辛集市| 咸阳市| 定日县| 饶平县| 永兴县| 通州市| 乐亭县| 云南省| 金乡县| 北票市| 江油市| 芜湖市| 勃利县| 蒲江县| 龙口市| 大关县| 岱山县| 枝江市| 织金县| 定州市| 太湖县| 衡阳县|