当前位置: 移动技术网 > IT编程>开发语言>Java > 详解Java获取环境变量及系统属性的方法

详解Java获取环境变量及系统属性的方法

2019年07月22日  | 移动技术网IT编程  | 我要评论

环境变量这个概念不陌生, 就是操作系统的环境变量。
系统变量就是java本身维护的变量。 通过 system.getproperty 的方式获取。
对于不同的操作系统来说, 环境变量的处理可能会有一些不统一的地方, 比如说: 不区分大小写 等等。

java 获取环境变量
java 获取环境变量的方式很简单:
system.getenv()  得到所有的环境变量
system.getenv(key) 得到某个环境变量的值
 

map map = system.getenv(); 
iterator it = map.entryset().iterator(); 
while(it.hasnext()) 
{ 
  entry entry = (entry)it.next(); 
  system.out.print(entry.getkey()+"="); 
  system.out.println(entry.getvalue()); 
} 

如果是windows 系统, 打印出来的值通过从 “我的电脑” 里看到的环境变量是一样的。

java 获取和设置系统变量
java 获取环境变量的方式也很简单:
system.getproperties()  得到所有的系统变量
system.getproperty(key)  得到某个系统变量的值
 

properties properties = system.getproperties(); 
iterator it = properties.entryset().iterator(); 
while(it.hasnext()) 
{ 
  entry entry = (entry)it.next(); 
  system.out.print(entry.getkey()+"="); 
  system.out.println(entry.getvalue()); 
} 

 系统变量除了可以获取之外, 还可以通过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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网