详解Java获取环境变量及系统属性的方法
环境变量这个概念不陌生, 就是操作系统的环境变量。
系统变量就是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
更多详解Java获取环境变量及系统属性的方法相关文章请关注PHP中文网!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

本文使用lambda表达式,流API,方法参考和可选探索将功能编程集成到Java中。 它突出显示了通过简洁性和不变性改善代码可读性和可维护性等好处

本文讨论了使用JPA进行对象相关映射,并具有高级功能,例如缓存和懒惰加载。它涵盖了设置,实体映射和优化性能的最佳实践,同时突出潜在的陷阱。[159个字符]

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。

本文使用选择器和频道使用单个线程有效地处理多个连接的Java的NIO API,用于非阻滞I/O。 它详细介绍了过程,好处(可伸缩性,性能)和潜在的陷阱(复杂性,

本文使用Maven和Gradle之类的工具讨论了具有适当的版本控制和依赖关系管理的自定义Java库(JAR文件)的创建和使用。

本文详细介绍了用于网络通信的Java的套接字API,涵盖了客户服务器设置,数据处理和关键考虑因素,例如资源管理,错误处理和安全性。 它还探索了性能优化技术,我
