详解Java获取环境变量及系统属性的方法
环境变量这个概念不陌生,就是操作系统的环境变量。
系统变量就是java本身维护的变量。通过System.getProperty的方式获取。
对于不同的操作系统来说,环境变量的处理可能会有一些不统一的地方,比如说:不区分大小写等等。
Java获取环境变量
Java获取环境变量的方式很简单:
System.getEnv() 得到所有的环境变量
System.getEnv(key)得到某个环境变量的值
Mapmap=System.getenv(); Iteratorit=map.entrySet().iterator(); while(it.hasNext()) { Entryentry=(Entry)it.next(); System.out.print(entry.getKey()+"="); System.out.println(entry.getValue()); }
如果是windows系统,打印出来的值通过从“我的电脑”里看到的环境变量是一样的。
Java获取和设置系统变量
Java获取环境变量的方式也很简单:
System.getProperties() 得到所有的系统变量
System.getProperty(key) 得到某个系统变量的值
Propertiesproperties=System.getProperties(); Iteratorit=properties.entrySet().iterator(); while(it.hasNext()) { Entryentry=(Entry)it.next(); System.out.print(entry.getKey()+"="); System.out.println(entry.getValue()); }
系统变量除了可以获取之外,还可以通过System.setProperty(key,value) 的方式设置自己需要的系统变量。
默认情况下,java设置了哪些系统变量:
- java.versionJava运行时环境版本
- java.vendorJava运行时环境供应商
- java.vendor.urlJava供应商的URL
- java.homeJava安装目录
- java.vm.specification.versionJava虚拟机规范版本
- java.vm.specification.vendorJava虚拟机规范供应商
- java.vm.specification.nameJava虚拟机规范名称
- java.vm.versionJava虚拟机实现版本
- java.vm.vendorJava虚拟机实现供应商
- java.vm.nameJava虚拟机实现名称
- java.specification.versionJava运行时环境规范版本
- java.specification.vendorJava运行时环境规范供应商
- java.specification.nameJava运行时环境规范名称
- java.class.versionJava类格式版本号
- java.class.pathJava类路径
- 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
setSUN_JAVA_HOME=C:\Oracle\Middleware\jdk160_21
这里设置的是环境变量
2.在log4j的配置中,有时会配置logfile的产生路径。
比如${LOG_DIR}/logfile.log,这里的LOG_DIR是被系统属性的变量替换的。
3.看一下java源码,通过System.getProperties()的方式获取系统变量时,会有一个安全的检查
publicstaticPropertiesgetProperties(){ SecurityManagersm=getSecurityManager(); if(sm!=null){ sm.checkPropertiesAccess(); } returnprops; }
在单个Javaapplication 测试时,System里的SecurityManager是空的。
在Applet运行时,会结合.policy这个文件来检查权限。
如果给一个空的SecurityManager会发现就会抛出权限异常。
publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub System.setSecurityManager(newSecurityManager()); //SecurityManagersm=System.getSecurityManager(); //System.out.println(sm); System.getSecurityManager().checkPropertiesAccess(); }
publicstaticvoidmain(String[]args) { Mapm=System.getenv(); for(Iteratorit=m.keySet().iterator();it.hasNext();) { Stringkey=(String)it.next(); Stringvalue=(String)m.get(key); System.out.println(key+":"+value); } System.out.println("--------------------------------------"); Propertiesp=System.getProperties(); for(Iteratorit=p.keySet().iterator();it.hasNext();) { Stringkey=(String)it.next(); Stringvalue=(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:/ProgramFiles/MicrosoftDirectXSDK(August2008)/ VS80COMNTOOLS:C:/ProgramFiles/MicrosoftVisualStudio8/Common7/Tools/ SESSIONNAME:Console HOMEPATH:/DocumentsandSettings/Administrator TMP:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp windir:C:/WINDOWS PROCESSOR_IDENTIFIER:x86Family6Model15Stepping13,GenuineIntel VS90COMNTOOLS:e:/ProgramFiles/MicrosoftVisualStudio9.0/Common7/Tools/ SystemDrive:C: USERPROFILE:C:/DocumentsandSettings/Administrator PATHEXT:.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH CommonProgramFiles:C:/ProgramFiles/CommonFiles 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:/DocumentsandSettings/AllUsers lib:C:/ProgramFiles/SQLXML4.0/bin/ PROCESSOR_LEVEL:6 SystemRoot:C:/WINDOWS ClusterLog:C:/WINDOWS/Cluster/cluster.log APPDATA:C:/DocumentsandSettings/Administrator/ApplicationData Path:C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/ProgramFiles/MicrosoftSQLServer/80/Tools/Binn/;C:/ProgramFiles/MicrosoftSQLServer/90/DTS/Binn/;C:/ProgramFiles/MicrosoftSQLServer/90/Tools/binn/;C:/ProgramFiles/MicrosoftSQLServer/90/Tools/Binn/VSShell/Common7/IDE/;C:/ProgramFiles/MicrosoftVisualStudio8/Common7/IDE/PrivateAssemblies/;D:/program/devel/flex_sdk2/bin;D:/program/devel/ant/bin;C:/ProgramFiles/Java/jdk1.6.0_07/bin;%JONAS_ROOT%/bin/nt;d:/program/devel/ant/bin JAVA_HOME:C:/ProgramFiles/Java/jdk1.6.0_07 FP_NO_HOST_CHECK:NO PROCESSOR_REVISION:0f0d ProgramFiles:C:/ProgramFiles
-------------------------------------- java.runtime.name:Java(TM)2RuntimeEnvironment,StandardEdition sun.boot.library.path:D:/ProgramFiles/MyEclipse6.5/jre/bin java.vm.version:1.5.0_11-b03 java.vm.vendor:SunMicrosystemsInc. java.vendor.url:http://java.sun.com/ path.separator:; java.vm.name:JavaHotSpot(TM)ClientVM file.encoding.pkg:sun.io sun.java.launcher:SUN_STANDARD user.country:CN sun.os.patch.level:ServicePack2 java.vm.specification.name:JavaVirtualMachineSpecification 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:/ProgramFiles/MyEclipse6.5/jre/lib/endorsed os.arch:x86 java.io.tmpdir:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ line.separator: java.vm.specification.vendor:SunMicrosystemsInc. user.variant: os.name:Windows2003 sun.jnu.encoding:GBK java.library.path:D:/ProgramFiles/MyEclipse6.5/jre/bin;.;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/ProgramFiles/MicrosoftSQLServer/80/Tools/Binn/;C:/ProgramFiles/MicrosoftSQLServer/90/DTS/Binn/;C:/ProgramFiles/MicrosoftSQLServer/90/Tools/binn/;C:/ProgramFiles/MicrosoftSQLServer/90/Tools/Binn/VSShell/Common7/IDE/;C:/ProgramFiles/MicrosoftVisualStudio8/Common7/IDE/PrivateAssemblies/;D:/program/devel/flex_sdk2/bin;D:/program/devel/ant/bin;C:/ProgramFiles/Java/jdk1.6.0_07/bin;%JONAS_ROOT%/bin/nt;d:/program/devel/ant/bin java.specification.name:JavaPlatformAPISpecification java.class.version:49.0 sun.management.compiler:HotSpotClientCompiler os.version:5.2 user.home:C:/DocumentsandSettings/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:/ProgramFiles/MyEclipse6.5/jre sun.arch.data.model:32 user.language:zh java.specification.vendor:SunMicrosystemsInc. awt.toolkit:sun.awt.windows.WToolkit java.vm.info:mixedmode java.version:1.5.0_11 java.ext.dirs:D:/ProgramFiles/MyEclipse6.5/jre/lib/ext sun.boot.class.path:D:/ProgramFiles/MyEclipse6.5/jre/lib/rt.jar;D:/ProgramFiles/MyEclipse6.5/jre/lib/i18n.jar;D:/ProgramFiles/MyEclipse6.5/jre/lib/sunrsasign.jar;D:/ProgramFiles/MyEclipse6.5/jre/lib/jsse.jar;D:/ProgramFiles/MyEclipse6.5/jre/lib/jce.jar;D:/ProgramFiles/MyEclipse6.5/jre/lib/charsets.jar;D:/ProgramFiles/MyEclipse6.5/jre/classes java.vendor:SunMicrosystemsInc. 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+mmxpentium_propentium+mmxpentiumi486i386i86