1. 程式人生 > >java中獲取系統屬性以及環境變數

java中獲取系統屬性以及環境變數

System.getEnv()和System.getProperties()的區別

從概念上講,系統屬性環境變數都是名稱與值之間的對映。兩種機制都能用來將使用者定義的資訊傳遞給 Java 程序。環境變數產生更多的全域性效應,因為它們不僅對Java 子程序可見,而且對於定義它們的程序的所有子程序都是可見的。在不同的作業系統上,它們的語義有細微的差別,比如,不區分大小寫。因為這些原因,環境變數更可能有意料不到的副作用。最好在可能的地方使用系統屬性。環境變數應該在需要全域性效應的時候使用,或者在外部系統介面要求使用環境變數時使用(比如PATH)。

程式碼如下

public static void main(String [] args)

{

Map m = System.getenv();

for ( Iterator it = m.keySet().iterator(); it.hasNext(); )

{

String key = (String ) it.next();

String value = (String )m.get(key);

System.out.println(key +":" +value);

}

System.out.println( "--------------------------------------" );

Properties p = System.getProperties();

for ( Iterator it = p.keySet().iterator(); it.hasNext(); )

{

String key = (String ) it.next();

String value = (String )p.get(key);

System.out.println(key +":" +value);

}

}

輸入如下:

ANT_HOME:D:/program/devel/ant

PROCESSOR_ARCHITECTURE:x86

LOGONSERVER://RJ-WEIJIANJUN

HOMEDRIVE:C:

CATALINA_HOME:D:/program/server/Tomcat5.5

DXSDK_DIR:d:/Program Files/Microsoft DirectX SDK (August 2008)/

VS80COMNTOOLS:C:/Program Files/Microsoft Visual Studio 8/Common7/Tools/

SESSIONNAME:Console

HOMEPATH:/Documents and Settings/Administrator

TMP:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp

windir:C:/WINDOWS

PROCESSOR_IDENTIFIER:x86 Family 6 Model 15 Stepping 13, GenuineIntel

VS90COMNTOOLS:e:/Program Files/Microsoft Visual Studio 9.0/Common7/Tools/

SystemDrive:C:

USERPROFILE:C:/Documents and Settings/Administrator

PATHEXT:.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

CommonProgramFiles:C:/Program Files/Common Files

NUMBER_OF_PROCESSORS:2

ComSpec:C:/WINDOWS/system32/cmd.exe

COMPUTERNAME:RJ-WEIJIANJUN

OS:Windows_NT

USERNAME:Administrator

CLIENTNAME:Console

TEMP:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp

USERDOMAIN:RJ-WEIJIANJUN

ALLUSERSPROFILE:C:/Documents and Settings/All Users

lib:C:/Program Files/SQLXML 4.0/bin/

PROCESSOR_LEVEL:6

SystemRoot:C:/WINDOWS

ClusterLog:C:/WINDOWS/Cluster/cluster.log

APPDATA:C:/Documents and Settings/Administrator/Application Data

Path:C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/Program Files/Microsoft SQL Server/80/Tools/Binn/;C:/Program Files/Microsoft SQL Server/90/DTS/Binn/;C:/Program Files/Microsoft SQL Server/90/Tools/binn/;C:/Program Files/Microsoft SQL Server/90/Tools/Binn/VSShell/Common7/IDE/;C:/Program Files/Microsoft Visual Studio 8/Common7/IDE/PrivateAssemblies/;D:/program/devel/flex_sdk2/bin;D:/program/devel/ant/bin;C:/Program Files/Java/jdk1.6.0_07/bin;%JONAS_ROOT%/bin/nt;d:/program/devel/ant/bin

JAVA_HOME:C:/Program Files/Java/jdk1.6.0_07

FP_NO_HOST_CHECK:NO

PROCESSOR_REVISION:0f0d

ProgramFiles:C:/Program Files

以下是property的輸出:

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

java.runtime.name:Java(TM) 2 Runtime Environment, Standard Edition

sun.boot.library.path:D:/Program Files/MyEclipse 6.5/jre/bin

java.vm.version:1.5.0_11-b03

java.vm.vendor:Sun Microsystems Inc.

java.vendor.url:http://java.sun.com/

path.separator:;

java.vm.name:Java HotSpot(TM) Client VM

file.encoding.pkg:sun.io

sun.java.launcher:SUN_STANDARD

user.country:CN

sun.os.patch.level:Service Pack 2

java.vm.specification.name:Java Virtual Machine Specification

user.dir:D:/dev/eclipse/mye65/workspace/jmx

java.runtime.version:1.5.0_11-b03

java.awt.graphicsenv:sun.awt.Win32GraphicsEnvironment

java.endorsed.dirs:D:/Program Files/MyEclipse 6.5/jre/lib/endorsed

os.arch:x86

java.io.tmpdir:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/

line.separator:

java.vm.specification.vendor:Sun Microsystems Inc.

user.variant:

os.name:Windows 2003

sun.jnu.encoding:GBK

java.library.path:D:/Program Files/MyEclipse 6.5/jre/bin;.;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/Program Files/Microsoft SQL Server/80/Tools/Binn/;C:/Program Files/Microsoft SQL Server/90/DTS/Binn/;C:/Program Files/Microsoft SQL Server/90/Tools/binn/;C:/Program Files/Microsoft SQL Server/90/Tools/Binn/VSShell/Common7/IDE/;C:/Program Files/Microsoft Visual Studio 8/Common7/IDE/PrivateAssemblies/;D:/program/devel/flex_sdk2/bin;D:/program/devel/ant/bin;C:/Program Files/Java/jdk1.6.0_07/bin;%JONAS_ROOT%/bin/nt;d:/program/devel/ant/bin

java.specification.name:Java Platform API Specification

java.class.version:49.0

sun.management.compiler:HotSpot Client Compiler

os.version:5.2

user.home:C:/Documents and Settings/Administrator

user.timezone:Asia/Shanghai

java.awt.printerjob:sun.awt.windows.WPrinterJob

file.encoding:GBK

java.specification.version:1.5

java.class.path:D:/dev/eclipse/mye65/workspace/jmx/bin;D:/program/lib/jmx/jmxtools.jar;D:/program/lib/log/commons-logging-1.1.1.jar;D:/program/lib/log/log4j-1.2.15.jar;D:/program/lib/registry/registry.jar

user.name:Administrator

java.vm.specification.version:1.0

java.home:D:/Program Files/MyEclipse 6.5/jre

sun.arch.data.model:32

user.language:zh

java.specification.vendor:Sun Microsystems Inc.

awt.toolkit:sun.awt.windows.WToolkit

java.vm.info:mixed mode

java.version:1.5.0_11

java.ext.dirs:D:/Program Files/MyEclipse 6.5/jre/lib/ext

sun.boot.class.path:D:/Program Files/MyEclipse 6.5/jre/lib/rt.jar;D:/Program Files/MyEclipse 6.5/jre/lib/i18n.jar;D:/Program Files/MyEclipse 6.5/jre/lib/sunrsasign.jar;D:/Program Files/MyEclipse 6.5/jre/lib/jsse.jar;D:/Program Files/MyEclipse 6.5/jre/lib/jce.jar;D:/Program Files/MyEclipse 6.5/jre/lib/charsets.jar;D:/Program Files/MyEclipse 6.5/jre/classes

java.vendor:Sun Microsystems Inc.

file.separator:/

java.vendor.url.bug:http://java.sun.com/cgi-bin/bugreport.cgi

sun.io.unicode.encoding:UnicodeLittle

sun.cpu.endian:little

sun.desktop:windows

sun.cpu.isalist:pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86

個人認為比較重要的系統屬性:

java.homeJava 安裝目錄 (比如D:/JavaStudio/jdk15/jre)
java.class.path
Java 類路徑
java.vm.version
Java虛擬機器版本號(比如:1.5.0-b64
java.version
Java版本號(比如:1.5.0)

os.name:作業系統的名稱(比如:Windows XP)
os.version
:作業系統的版本(比如:Windows XP 的版本為5.1)

user.home:使用者的主目錄 (比如:C:/Documents and Settings/zhangsan)
user.name
:當前使用者名稱
user.country
:當前使用者所屬國家
user.dir
:使用者的當前工作目錄比較重要的環境變數(Windows作業系統):

%COMPUTERNAME%    
返回計算機的名稱。
%COMSPEC%    
返回命令列直譯器可執行程式的準確路徑。

%WINDIR%    返回作業系統目錄的位置。
%OS%    
返回作業系統的名稱。Windows 2000 將作業系統顯示為 Windows_NT
%PATH%   
指定可執行檔案的搜尋路徑。

%USERDOMAIN%    返回包含使用者帳戶的域的名稱。
%USERNAME%   
返回當前登入的使用者的名稱。

下面是一篇在jdk1.4中得到環境變數的方法:

In JDK 1.4 System.getenv() is deprecated. (In JDK 1.5 it is un-deprected again.) The getProperty method is now the correspoding method to get the variables. For example: System.getProperty("java.class.path",""). But it doesn't work for user defined environment variable. This problem can be solved by using the following code:
import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
* Environment class simulates the System.getenv() method which is deprecated
* on java 1.4.2
*
* @author v-josp
*/
public class TestRoot
{
//result of all enviornment variables
private static BufferedReader commandResult;

static
{
String cmd = null;
String os = null;

//getting the OS name
os = System.getProperty("os.name").toLowerCase();

// according to OS set the command to execute
if(os.startsWith("windows"))
{
cmd = "cmd /c SET";
}
else
{
cmd="env";
}

try
{
//execute the command and get the result in the form of InputStream
Process p = Runtime.getRuntime().exec(cmd);

//parse the InputStream data
InputStreamReader isr = new InputStreamReader(p.getInputStream());
commandResult= new BufferedReader(isr);
}
catch (Exception e)
{
System.out.println("OSEnvironment.class error: " + cmd + ":" + e);
}
}

/**
* This method is used to get the path of the given enviornment variable. This
* method tries to simulates the System.getenv() which is deprecated on java 1.4.2
*
* @param String - name of the environment variable
* @param String - default value
* @return
*/
public static String getenv(String envName,String defaultValue)
{
String line = null;
try
{
while ((line = commandResult.readLine()) != null)
{
if(line.indexOf(envName)>-1)
{
return line.substring(line.indexOf(envName)+envName.length()+1);
}
}
return defaultValue;
}
catch (Exception e)
{
return defaultValue;
}
}

public static void main(String args[])
{
System.out.println(TestRoot.getenv("CLASSPATH",""));
}
}