在java應用程序運行時,非凡是需要在跨平臺工作環境下運行時,需要確定操作系統類型、用戶JDK版本和用戶工作目錄等隨工作平臺變化的信息,來保證程序正確運行。一般情況下,可以利用JDK提供的系統屬性類(PRoperties)中的方法,快速地獲取工作環境信息。另外,程序開發人員還可以定義與應用程序相關的系統屬性文件,在用戶程序執行過程中動態地加載程序員定義的屬性文件來控制程序運行。本文通過對系統屬性類的分析,結合實際例子介紹如何定義系統屬性文件,并討論安全策略文件的定義。屬性類 Java Properties類的繼續關系如下:java.lang.Object+--java.util.Dictionary+--java.util.Hashtable+--java.util.Properties在應用程序開始執行時,程序首先讀取系統的默認屬性。假如定義了用戶屬性文件,則應用程序加載該屬性文件。程序運行過程中可以根據執行情況動態地修改屬性定義,并在程序結束運行前,保存屬性文件。獲取屬性的方法:●contains(Object value)、containsKey(Object key):假如給定的參數或屬性要害字在屬性表中有定義,該方法返回True,否則返回False;●getProperty(String key)、getProperty(String key, String default):根據給定的屬性要害字獲取要害字值;●list(PrintStream s)、list(PrintWriter w): 在輸出流中輸出屬性表內容;●size():返回當前屬性表中定義的屬性要害字個數。設置屬性的方法:●put(Object key, Object value) :向屬性表中追加屬性要害字和要害字的值;●remove(Object key) :從屬性表中刪除要害字。獲取系統屬性系統屬性是指與用戶程序相關的操作系統配置信息以及軟件信息。通常與用戶程序相關的屬性要害字包括:●file.separator : 文件分隔符, Windows環境下為“/",Unix環境下為“/”;●user.home :用戶主目錄;●java.home :Java實時運行環境的安裝目錄;●java.ext.dirs :JDK的安裝目錄;●os.name :操作系統名稱;●user.name :用戶登錄名稱;●os.version :操作系統版本;●path.separator :當前操作系統的路徑分隔符;●user.dir :當前用戶程序所在目錄。下面結合例子說明獲取系統屬性的方法。/*getSystemProperties.java*/import java.util.Properties; public class getSystemProperties{public static void main(String args[]){ //通過獲得系統屬性構造屬性類 propProperties prop = new Properties( System.getProperties() );//在標準輸出中輸出系統屬性的內容prop.list(System.out);}//根據獲取的系統屬性確定程序執行流程……}上述程序執行后,在Windows環境中產生類似如下的輸出:user.home=C:/WIN95java.home=D:/JDK1.2/JREjava.ext.dirs=D:/JDK1.2os.name=Windows 95user.name=Officejava.vm.name=Classic VMos.version=4.10path.separator=;file.separator=/user.dir=D:/JavaTest屬性文件的操作方法Java程序開發人員可以通過定義屬性文件來設置程序運行的參數。屬性文件是程序外部文件,在應用程序初始運行時,可以通過讀取屬性文件來獲取有關程序運行的參數。例如,在程序運行時需要在程序外部控制程序的執行流程,這時可以通過定義屬性文件的方法達到目的。下面結合例子說明屬性文件的操作方法:/*PropertyFile.java*///引入相關類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{ //生成文件輸入和輸出流,輸入流指向用戶已經定義的屬性文件,輸出流指向由應用程序新定義的屬性文件fis = new FileInputStream(“firstProp.txt”);fos = new FileOutputStream(“secondProp.txt”);}catch(FileNotFoundException e){System.out.println(“Cannot create the file stream”);}try{//從輸入文件加載系統屬性prop.load(fis);//根據程序執行情況更改屬性要害字的值prop.put(“Switch”,“1”);//輸出新屬性文件secondProp.txtprop .save ( fos ,“-- a new properties file-”);}catch(IOException e){System.out.println(“Exception in repleace the keyWord”);}}}在程序執行之前,用戶必須首先定義屬性文件firstProp.txt,該文件內容如下:Switch= 0Version= 1.0Directory= JavaTest程序運行后,輸出新的屬性文件secondProp.txt,該文件內容如下(注重觀察兩個文件要害字Switch內容的區別):#--a new properties file--#Sun Mar 11 21:22:40 CST 2001Switch= 1Version= 1.0Directory= JavaTest從上例可以看出,通過JDK提供的屬性類Properties可以方便地在程序外部對應用程序的執行流程進行控制,從而簡化了編程難度,使程序流程可控性更好。安全策略文件Java提供的應用程序環境的安全策略,使得不同的代碼對系統資源擁有不同的訪問許可。Java應用程序安全策略由Policy對象來表達,通過定義安全策略文件來實現。Java 1.2的安全策略文件分為三級:系統安全策略文件、用戶安全策略文件和缺省安全策略文件。當Java應用程序啟動后,按照先后順序加載安全策略內容。下面結合典型的安全策略文件內容對安全策略文件的定義進行說明:grant{ //對系統和用戶目錄設置“讀”的權限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”;//其他安全策略內容};上述安全策略文件定義了應用程序對用戶目錄、用戶登錄目錄、JDK安裝目錄、用戶名稱等系統內容具有讀的權限。
新聞熱點
疑難解答