Java語言以其物件導向、跨平台、可移植性好、安全性高等優點,受到眾多編程人員的青睞,越來越多的人將其作為應用軟體開發語言的首選。
在Java應用程式運行時,特別是需要在跨平台工作環境下運行時,需要確定作業系統類型、使用者JDK版本和使用者工作目錄等隨工作平台變化的資訊,來保證程式正確運行。一般情況下,可以利用JDK提供的系統屬性類(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[])
{
//通過獲得系統屬性構造屬性類 prop
Properties prop = new Properties(
System.getProperties() );
//在標準輸出中輸出系統屬性的內容
prop.list(System.out);
}
//根據擷取的系統屬性確定程式執行流程
……
}
上述程式執行後,在Windows環境中產生類似如下的輸出:
user.home=C:\WIN95
java.home=D:\JDK1.2\JRE
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程式開發人員可以通過定義屬性檔案來設定程式啟動並執行參數。屬性檔案是程式外部檔案,在應用程式初始運行時,可以通過讀取屬性檔案來擷取有關程式啟動並執行參數。例如,在程式運行時需要在程式外部控製程序的執行流程,這時可以通過定義屬性檔案的方法達到目的。下面結合例子說明屬性檔案的操作方法:
/*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.txt
prop .save
( fos ,“-- a new properties file-”);
}
catch(IOException e)
{
System.out.println
(“Exception in repleace the keyword”);
}
}
}
在程式執行之前,使用者必須首先定義屬性檔案firstProp.txt,該檔案內容如下:
Switch= 0
Version= 1.0
Directory= JavaTest
程式運行後,輸出新的屬性檔案secondProp.txt,該檔案內容如下(注意觀察兩個檔案關鍵字Switch內容的區別):
#--a new properties file--
#Sun Mar 11 21:22:40 CST 2001
Switch= 1
Version= 1.0
Directory= JavaTest
從上例可以看出,通過JDK提供的屬性類Properties可以方便地在程式外部對應用程式的執行流程進行控制,從而簡化了編程難度,使程式流程可控性更好。
安全性原則檔案
Java提供的應用程式環境的安全性原則,使得不同的代碼對系統資源擁有不同的訪問許可。Java應用程式安全性原則由Policy對象來表達,通過定義安全性原則檔案來實現。Java1.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”;
//其他安全性原則內容
};
推薦初學者一個編程技術的學習網站,96堆棧 軟體編程網,http://www.96dz.com,裡面有C++視頻教程、C#視頻教程、Java視頻教程下載,還有C\C++、Java、C# .NET等編程技術文摘,包括目前主流的Linux編程與Web編程等學習資料視頻教程下載。