详解Java获取环境变量及系统属性的⽅法
环境变量这个概念不陌⽣,就是操作系统的环境变量。
系统变量就是java本⾝维护的变量。通过 Property 的⽅式获取。
对于不同的操作系统来说,环境变量的处理可能会有⼀些不统⼀的地⽅,⽐如说:不区分⼤⼩写等等。
Java 获取环境变量
Java 获取环境变量的⽅式很简单:
Map map = v();
Iterator it = Set().iterator();
while(it.hasNext())
{
Entry entry = (();
System.out.Key()+"=");
System.out.Value());
}
如果是windows 系统,打印出来的值通过从 “我的电脑” ⾥看到的环境变量是⼀样的。
Java 获取和设置系统变量
Java 获取环境变量的⽅式也很简单:
Properties properties = Properties();
Iterator it = Set().iterator();
while(it.hasNext())
{
Entry entry = (();
System.out.Key()+"=");
System.out.Value());
}
系统变量除了可以获取之外,还可以通过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 加载库时搜索的路径列表
pdir 默认的临时⽂件路径
javapiler 要使⽤的 JIT 编译器的名称
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 的 d
set SUN_JAVA_HOME=C:\Oracle\Middleware\jdk160_21
这⾥设置的是环境变量
2. 在log4j 的配置中,有时会配置log file 的产⽣路径。
⽐如 ${LOG_DIR}/logfile.log,这⾥的LOG_DIR 是被系统属性的变量替换的。
3. 看⼀下java 源码,通过 Properties() 的⽅式获取系统变量时,会有⼀个安全的检查
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 = SecurityManager();
//System.out.println(sm);
}
从概念上讲,系统属性和环境变量都是名称与值之间的映射。两种机制都能⽤来将⽤户定义的信息传递给 Java 进程。环境变量产⽣更多的全局效应,因为它们不仅对Java ⼦进程可见,⽽且对于定义它们的进程的所有⼦进程都是可见的。在不同的操作系统上,它们的语义有细微的差别,⽐如,不区分⼤⼩写。因为这些原因,环境变量更可能有意料不到的副作⽤。最好在可能的地⽅使⽤系统属性。环境变量应该在需要全局效应的时候使⽤,或者在外部系统接⼝要求使⽤环境变量时使⽤(⽐如 PATH)。
代码如下:
public static void main(String [] args)
{
Map m = v();
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 = Properties();
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/
java系统变量设置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/
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 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:java.sun/
path.separator:;
java.vm.name:Java HotSpot(TM) Client VM
sun.java.launcher:SUN_STANDARD
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
aphicsenv:sun.awt.Win32GraphicsEnvironment
os.arch:x86
pdir:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/
line.separator:
java.vm.specification.vendor:Sun Microsystems Inc.
user.variant:
os.name:Windows 2003
ding: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 S java.specification.name:Java Platform API Specification
java.class.version:49.0
sun.managementpiler: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
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.del:32
user.language:zh
java.specification.vendor:Sun Microsystems Inc.
java.vm.info:mixed mode
java.version:1.5.0_11
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:/P java.vendor:Sun Microsystems Inc.
file.separator:/
java.vendor.url.bug:java.sun/i
sun.ding:UnicodeLittle
dian:little
sun.desktop:windows
sun.cpu.isalist:pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。