Java用System读取系统相关信息、环境变量——(六)
package Java_Test; public class System1 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(System.getProperty("java.version")); System.out.println(System.getProperty("java.vendor")); System.out.println(System.getProperty("java.home")); System.out.println(System.getProperty("java.library.path")); System.out.println(System.getProperty("user.dir")); //获取当前类工作目录 System.out.println(System.getProperty("os.version")); System.out.println(System.getProperty("os.name")); System.out.println(System.getenv("path")); } }
补充:获取系统所有属性的方法
package com.test; import java.util.Properties; public class MyTest { public static void main(String[] args) { Properties properties = System.getProperties(); for (Object key : properties.keySet()) { System.out.println(key + " : " + properties.getProperty((String) key)); } } }
源码查看:所有的属性都存在System的一个内部属性Properties中,Properties是一个继承HashTable的类
(1)System.getProperties
public static Properties getProperties() { SecurityManager sm = getSecurityManager(); if (sm != null) { sm.checkPropertiesAccess(); } return props; }
private static Properties props;
(2)Properties是一个继承HashTable的类
public class Properties extends Hashtable<Object,Object> { private static final long serialVersionUID = 4112578634029874840L; protected Properties defaults; 。。。 }
结果:
java.runtime.name : Java(TM) SE Runtime Environment
sun.boot.library.path : C:\Program Files\Java\jdk1.7.0_80\jre\bin
java.vm.version : 24.80-b11
java.vm.vendor : Oracle Corporation
java.vendor.url : http://java.oracle.com/
path.separator : ;
java.vm.name : Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg : sun.io
user.country : CN
user.script :
sun.java.launcher : SUN_STANDARD
sun.os.patch.level :
java.vm.specification.name : Java Virtual Machine Specification
user.dir : E:\xiangmu\Mytest
java.runtime.version : 1.7.0_80-b15
java.awt.graphicsenv : sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs : C:\Program Files\Java\jdk1.7.0_80\jre\lib\endorsed
os.arch : amd64
java.io.tmpdir : C:\Users\ADMINI~1\AppData\Local\Temp\
line.separator :
java.vm.specification.vendor : Oracle Corporation
user.variant :
os.name : Windows 8.1
sun.jnu.encoding : GBK
java.library.path : C:\Program Files\Java\jdk1.7.0_80\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jdk1.7.0_80/bin/../jre/bin/server;C:/Program Files/Java/jdk1.7.0_80/bin/../jre/bin;C:/Program Files/Java/jdk1.7.0_80/bin/../jre/lib/amd64;C:\oraclexe\app\oracle\product\11.2.0\server\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;E:\soft\apache-maven-3.5.3\bin;C:\WINDOWS\System32\OpenSSH\;E:\git\Git\cmd;E:\SVN\bin;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;E:\soft\maven\apache-maven-3.3.9\bin;C:\Program Files\MySQL\MySQL Server 5.7\bin;C:\Program Files\Java\jdk1.7.0_80\bin;E:\git\Git\bin;E:\git\Git\usr\bin;E:\git\Git;C:\Program Files\Java\jdk1.7.0_80\jre\bin;D:\zdcontomcat\zdc8\lo\program;;E:\soft\eclipse\eclipse-jee-mars-1-win32-x86_64\eclipse;;.
java.specification.name : Java Platform API Specification
java.class.version : 51.0
sun.management.compiler : HotSpot 64-Bit Tiered Compilers
os.version : 6.3
user.home : C:\Users\Administrator
user.timezone :
java.awt.printerjob : sun.awt.windows.WPrinterJob
file.encoding : UTF-8
java.specification.version : 1.7
java.class.path : E:\xiangmu\Mytest\bin;E:\xiangmu\Mytest\WebContent\WEB-INF\lib\log4j-1.2.16.jar;E:\xiangmu\Mytest\WebContent\WEB-INF\lib\slf4j-api-1.5.10.jar;E:\xiangmu\Mytest\WebContent\WEB-INF\lib\slf4j-log4j12-1.5.10.jar;E:\tomcat\apache-tomcat-7.0.88\lib\annotations-api.jar;E:\tomcat\apache-tomcat-7.0.88\lib\catalina-ant.jar;E:\tomcat\apache-tomcat-7.0.88\lib\catalina-ha.jar;E:\tomcat\apache-tomcat-7.0.88\lib\catalina-tribes.jar;E:\tomcat\apache-tomcat-7.0.88\lib\catalina.jar;E:\tomcat\apache-tomcat-7.0.88\lib\ecj-4.4.2.jar;E:\tomcat\apache-tomcat-7.0.88\lib\el-api.jar;E:\tomcat\apache-tomcat-7.0.88\lib\jasper-el.jar;E:\tomcat\apache-tomcat-7.0.88\lib\jasper.jar;E:\tomcat\apache-tomcat-7.0.88\lib\jsp-api.jar;E:\tomcat\apache-tomcat-7.0.88\lib\servlet-api.jar;E:\tomcat\apache-tomcat-7.0.88\lib\tomcat-api.jar;E:\tomcat\apache-tomcat-7.0.88\lib\tomcat-coyote.jar;E:\tomcat\apache-tomcat-7.0.88\lib\tomcat-dbcp.jar;E:\tomcat\apache-tomcat-7.0.88\lib\tomcat-i18n-es.jar;E:\tomcat\apache-tomcat-7.0.88\lib\tomcat-i18n-fr.jar;E:\tomcat\apache-tomcat-7.0.88\lib\tomcat-i18n-ja.jar;E:\tomcat\apache-tomcat-7.0.88\lib\tomcat-jdbc.jar;E:\tomcat\apache-tomcat-7.0.88\lib\tomcat-util.jar;E:\tomcat\apache-tomcat-7.0.88\lib\tomcat7-websocket.jar;E:\tomcat\apache-tomcat-7.0.88\lib\websocket-api.jar
user.name : Administrator
java.vm.specification.version : 1.7
sun.java.command : com.test.MyTest
java.home : C:\Program Files\Java\jdk1.7.0_80\jre
sun.arch.data.model : 64
user.language : zh
java.specification.vendor : Oracle Corporation
awt.toolkit : sun.awt.windows.WToolkit
java.vm.info : mixed mode
java.version : 1.7.0_80
java.ext.dirs : C:\Program Files\Java\jdk1.7.0_80\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
sun.boot.class.path : C:\Program Files\Java\jdk1.7.0_80\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_80\jre\lib\rt.jar;C:\Program Files\Java\jdk1.7.0_80\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.7.0_80\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_80\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_80\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_80\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_80\jre\classes
java.vendor : Oracle Corporation
file.separator : \
java.vendor.url.bug : http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding : UnicodeLittle
sun.cpu.endian : little
sun.desktop : windows
sun.cpu.isalist : amd64
补充:可以采用System.setProperties设置系统属性
public static void main(String[] args) { System.setProperty("mykey", "myvalue"); String property = System.getProperty("mykey"); System.out.println(property); try { Thread.sleep(100 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } }
我们可以在cmd窗口通过jinfo查看变量
C:\Users\Administrator>jps 1236 8544 MyTest 9384 Jps C:\Users\Administrator>jinfo 8544 Attaching to process ID 8544, please wait... Debugger attached successfully. Server compiler detected. JVM version is 24.80-b11 Java System Properties: java.runtime.name = Java(TM) SE Runtime Environment java.vm.version = 24.80-b11 sun.boot.library.path = C:\Program Files\Java\jdk1.7.0_80\jre\bin java.vendor.url = http://java.oracle.com/ java.vm.vendor = Oracle Corporation path.separator = ; file.encoding.pkg = sun.io java.vm.name = Java HotSpot(TM) 64-Bit Server VM sun.os.patch.level = sun.java.launcher = SUN_STANDARD user.script = user.country = CN user.dir = E:\xiangmu\Mytest java.vm.specification.name = Java Virtual Machine Specification java.runtime.version = 1.7.0_80-b15 mykey = myvalue
补充:System可以获取系统的环境变量
// 读取单个环境变量 String str = System.getenv("JAVA_HOME"); System.out.println(str); // 读取所有的环境变量 Map<String, String> getenv = System.getenv(); for (Map.Entry<String, String> entry : getenv.entrySet()) { System.out.println(entry.getKey() + "========" + entry.getValue()); }
结果:
C:\Program Files\Java\jdk1.7.0_80 USERPROFILE========C:\Users\Administrator ProgramData========C:\ProgramData PATHEXT========.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC Classpath========.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar JAVA_HOME========C:\Program Files\Java\jdk1.7.0_80 MAVEN_HOME========E:\soft\maven\apache-maven-3.3.9
.......
java的System.getProperty()方法可以获取的值:
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 |
用户的当前工作目录 |
补充:java中系统属性和系统环境变量(java system properties and environment variables)的区别
系统环境变量,可以被任何进程访问,而系统属性仅可以被依附的进程访问。两个不同的java进程可以访问相同的系统环境变量,但是仅可以分别访问到自己的系统属性。
(1)获取方式:
系统环境变量:System.getenv(key)
系统属性: System.getProperty(key)
(2)设置方式:
系统环境变量:仅通过os脚本设置,windows下如set设置的变量,linux下如export设置的变量,即不能再java代码中设置系统环境变量,没有setenv方法。
系统属性:可以通过:(1)java代码设置System.setProperty(key, value)(2)java VM参数-D,通过命令行设置