java 獲取系統變量(環境變量和設置變量)

前言

環境變量這個概念不陌生, 就是操做系統的環境變量。java

系統變量就是java自己維護的變量。 經過 System.getProperty 的方式獲取。web

對於不一樣的操做系統來講, 環境變量的處理可能會有一些不統一的地方, 好比說: 不區分大小寫 等等。
windows


Java 獲取環境變量

Java 獲取環境變量的方式很簡單:
安全

System.getEnv()  獲得全部的環境變量
架構

System.getEnv(key) 獲得某個環境變量的值app

    public static Properties getProperties() {
    SecurityManager sm = getSecurityManager();
        if (sm != null) {
        sm.checkPropertiesAccess();
    }

    return props;
    }


若是是windows 系統, 打印出來的值經過從 「個人電腦」 裏看到的環境變量是同樣的。
eclipse


Java 獲取和設置系統變量

Java 獲取環境變量的方式也很簡單:測試

System.getProperties()  獲得全部的系統變量flex

System.getProperty(key)  獲得某個系統變量的值ui

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.setSecurityManager(new SecurityManager());
        //SecurityManager sm = System.getSecurityManager();
        //System.out.println(sm);
        System.getSecurityManager().checkPropertiesAccess();
    }


 系統變量除了能夠獲取以外, 還能夠經過System.setProperty(key, value)  的方式設置本身須要的系統變量。


默認狀況下, java 設置了哪些系統變量:

java.version Java 運行時環境版本
java.vendor Java 運行時環境供應商
java.vendor.url Java 供應商的 URL
java.home Java 安裝目錄
java.vm.specification.version Java 虛擬機規範版本
java.vm.specification.vendor Java 虛擬機規範供應商
java.vm.specification.name Java 虛擬機規範名稱
java.vm.version Java 虛擬機實現版本
java.vm.vendor Java 虛擬機實現供應商
java.vm.name Java 虛擬機實現名稱
java.specification.version Java 運行時環境規範版本
java.specification.vendor Java 運行時環境規範供應商
java.specification.name Java 運行時環境規範名稱
java.class.version Java 類格式版本號
java.class.path Java 類路徑
java.library.path 加載庫時搜索的路徑列表
java.io.tmpdir 默認的臨時文件路徑
java.compiler 要使用的 JIT 編譯器的名稱
java.ext.dirs 一個或多個擴展目錄的路徑
os.name 操做系統的名稱
os.arch 操做系統的架構
os.version 操做系統的版本
file.separator 文件分隔符(在 UNIX 系統中是"/")
path.separator 路徑分隔符(在 UNIX 系統中是":")
line.separator 行分隔符(在 UNIX 系統中是"/n")
user.name 用戶的帳戶名稱
user.home 用戶的主目錄
user.dir 用戶的當前工做目錄補充

1 . 在.bat ;  .cmd 或  .sh 中會經過 set 的方式設置一些變量,

好比weblogic 的 setDomainEnv.cmd

set SUN_JAVA_HOME=C:\Oracle\Middleware\jdk160_21

這裏設置的是環境變量

2. 在log4j 的配置中, 有時會配置log file 的產生路徑。 

好比 ${LOG_DIR}/logfile.log, 這裏的LOG_DIR 是被系統屬性的變量替換的。

3. 看一下java 源碼, 經過 System.getProperties() 的方式獲取系統變量時, 會有一個安全的檢查

    public static Properties getProperties() {
    SecurityManager sm = getSecurityManager();
        if (sm != null) {
        sm.checkPropertiesAccess();
    }

    return props;
    }


在 單個Java application  測試時, System 裏的SecurityManager 是空的。

在Applet 運行時, 會結合 .policy 這個文件來檢查權限。


若是給一個空的SecurityManager 會發現就會拋出權限異常。

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.setSecurityManager(new SecurityManager());
        //SecurityManager sm = System.getSecurityManager();
        //System.out.println(sm);
        System.getSecurityManager().checkPropertiesAccess();
    }




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%    返回當前登陸的用戶的名稱。

相關文章
相關標籤/搜索