如果想要在程序中,动态获取当前JVM版本,要怎么办?
如果想要获得系统(Unix/ Windows)文件分隔符,到底是 “/” 还是 "",要怎么办?
如果想要获取操作系统的名称、版本等信息,要怎么办?
如果想要获取JDK路径,要怎么办?
如果想要获取用户主目录,要怎么办?
如果想要获取软件当前工作路径,要怎么办?
Java中System类的getProperties()方法,能帮你解决这一切。
从函数的原型注释中,知道该函数决定了当前系统属性。 有一个安全管理器,它的checkPropertiesAccess方法无参数调用,可能导致安全异常。
当前系统属性集通过getProperty(String)方法使用,返回值就包含了属性对象。
如果没有当前系统属性集,首先就会创建并初始化一个。
System.getProperties() 原型
/**
* Determines the current system properties.
* <p>
* First, if there is a security manager, its
* <code>checkPropertiesAccess</code> method is called with no
* arguments. This may result in a security exception.
* <p>
* The current set of system properties for use by the
* {@link #getProperty(String)} method is returned as a
* <code>Properties</code> object. If there is no current set of
* system properties, a set of system properties is first created and
* initialized.
* ...
*/
public static Properties getProperties() {
SecurityManager sm = getSecurityManager(); if (sm != null) { sm.checkPropertiesAccess(); } return props;
}
获取某个属性的方法,比如java版本信息
Properties props = System.getProperties();
props.getProperty("java.version");
通过System.getProperties(),还能获取什么信息?
通过查看System源码,可以看到getProperties() 注释中,还包含了以下这些keys信息
键 | 相关值的描述 |
---|---|
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 |
用户的当前工作目录 |
测试示例
public static void main(String[] args) { Properties props = System.getProperties();//系统属性 System.out.println("Java的运行环境版本:" + props.getProperty("java.version")); System.out.println("Java的运行环境供应商:" + props.getProperty("java.vendor")); System.out.println("Java供应商的URL:" + props.getProperty("java.vendor.url")); System.out.println("Java的安装路径:" + props.getProperty("java.home")); System.out.println("Java的虚拟bai机规范版本:" + props.getProperty("java.vm.specification.version")); System.out.println("Java的虚拟机规范供应商:" + props.getProperty("java.vm.specification.vendor")); System.out.println("Java的虚拟机规范名称:" + props.getProperty("java.vm.specification.name")); System.out.println("Java的虚拟机实现版本:" + props.getProperty("java.vm.version")); System.out.println("Java的虚拟机实现供应商:" + props.getProperty("java.vm.vendor")); System.out.println("Java的虚拟机实现名称:" + props.getProperty("java.vm.name")); System.out.println("Java运行时环境规范版本:" + props.getProperty("java.specification.version")); System.out.println("Java运行时环境规范供应商:" + props.getProperty("java.specification.vender")); System.out.println("Java运行时环境规范名称:" + props.getProperty("java.specification.name")); System.out.println("Java的类格式版本号:" + props.getProperty("java.class.version")); System.out.println("Java的类路径:" + props.getProperty("java.class.path")); System.out.println("加载库时搜索的路径列表:" + props.getProperty("java.library.path")); System.out.println("默认的临时文件路径:" + props.getProperty("java.io.tmpdir")); System.out.println("一个或多个扩展目录的路径:" + props.getProperty("java.ext.dirs")); System.out.println("操作系统的名称:" + props.getProperty("os.name")); System.out.println("操作系统的构架:" + props.getProperty("os.arch")); System.out.println("操作系统的版本:" + props.getProperty("os.version")); System.out.println("文件分隔符:" + props.getProperty("file.separator")); //unix是"/" , Windows是 "" System.out.println("路径分隔符:" + props.getProperty("path.separator")); //unix是":", windows是 ";" System.out.println("行分隔符:" + props.getProperty("line.separator")); //unix是" ", windows是 " " System.out.println("用户的账户名称:" + props.getProperty("user.name")); System.out.println("用户的主目录:" + props.getProperty("user.home")); System.out.println("用户的当前工作目录:" + props.getProperty("user.dir")); }
运行结果
Java的运行环境版本:1.8.0_181 Java的运行环境供应商:Oracle Corporation Java供应商的URL:http://java.oracle.com/ Java的安装路径:C:Program FilesJavajdk1.8.0_181jre Java的虚拟bai机规范版本:1.8 Java的虚拟机规范供应商:Oracle Corporation Java的虚拟机规范名称:Java Virtual Machine Specification Java的虚拟机实现版本:25.181-b13 Java的虚拟机实现供应商:Oracle Corporation Java的虚拟机实现名称:Java HotSpot(TM) 64-Bit Server VM Java运行时环境规范版本:1.8 Java运行时环境规范供应商:null Java运行时环境规范名称:Java Platform API Specification Java的类格式版本号:52.0 Java的类路径:C:Program FilesJavajdk1.8.0_181jrelibcharsets.jar;C:Program FilesJavajdk1.8.0_181jrelibdeploy.jar;C:Program FilesJavajdk1.8.0_181jrelibextaccess-bridge-64.jar;C:Program FilesJavajdk1.8.0_181jrelibextcldrdata.jar;C:Program FilesJavajdk1.8.0_181jrelibextdnsns.jar;C:Program FilesJavajdk1.8.0_181jrelibextjaccess.jar;C:Program FilesJavajdk1.8.0_181jrelibextjfxrt.jar;C:Program FilesJavajdk1.8.0_181jrelibextlocaledata.jar;C:Program FilesJavajdk1.8.0_181jrelibext ashorn.jar;C:Program FilesJavajdk1.8.0_181jrelibextsunec.jar;C:Program FilesJavajdk1.8.0_181jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.8.0_181jrelibextsunmscapi.jar;C:Program FilesJavajdk1.8.0_181jrelibextsunpkcs11.jar;C:Program FilesJavajdk1.8.0_181jrelibextzipfs.jar;C:Program FilesJavajdk1.8.0_181jrelibjavaws.jar;C:Program FilesJavajdk1.8.0_181jrelibjce.jar;C:Program FilesJavajdk1.8.0_181jrelibjfr.jar;C:Program FilesJavajdk1.8.0_181jrelibjfxswt.jar;C:Program FilesJavajdk1.8.0_181jrelibjsse.jar;C:Program FilesJavajdk1.8.0_181jrelibmanagement-agent.jar;C:Program FilesJavajdk1.8.0_181jrelibplugin.jar;C:Program FilesJavajdk1.8.0_181jrelib esources.jar;C:Program FilesJavajdk1.8.0_181jrelib t.jar;F:workspaceIDEAJava_Core2outproductionJava_Core2;E:Program FilesJetBrainsIntelliJ IDEA 202002libidea_rt.jar 加载库时搜索的路径列表:C:Program FilesJavajdk1.8.0_181in;C:WINDOWSSunJavain;C:WINDOWSsystem32;C:WINDOWS;E:PythonPython37Scripts;E:PythonPython37;C:Program Files (x86)Common FilesOracleJavajavapath;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:Program FilesJavajdk1.8.0_181in;C:WINDOWSSystem32OpenSSH;C:Program Filesdotnet;C:Program Files (x86)National InstrumentsSharedLabVIEW CLI;E:Program FilesTortoiseGitin;E:Program FilesGitcmd;E:Program FilesTortoiseSVNin;E:MinGWin;C:Program FilesIntelWiFiin;C:Program FilesCommon FilesIntelWirelessCommon;E:Program FilesUltraEdit;C:Program FilesJavajdk1.8.0_181jrein;C:Program FilesMySQLMySQL Shell 8.0in;C:Program FilesIntelWiFiin;C:Program FilesCommon FilesIntelWirelessCommon;C:UsersMartinAppDataLocalMicrosoftWindowsApps;E:ProgramsMicrosoft VS Codein;E:Program Files (x86)SSH Communications SecuritySSH Secure Shell;E:Program FilesJetBrainsIntelliJ IDEA 2020.2in;;;. 默认的临时文件路径:C:UsersMartinAppDataLocalTemp 一个或多个扩展目录的路径:C:Program FilesJavajdk1.8.0_181jrelibext;C:WINDOWSSunJavalibext 操作系统的名称:Windows 10 操作系统的构架:amd64 操作系统的版本:10.0 文件分隔符: 路径分隔符:; 行分隔符: 用户的账户名称:Martin 用户的主目录:C:UsersMartin 用户的当前工作目录:F:workspaceIDEAJava_Core2
如果万一忘记了具体的key,或者懒得根据某个key去查询系统属性,不妨试下下面这个方法,可以一次打印所有系统属性:
System.getProperties() .list(System.out);
ref
1. https://www.cnblogs.com/ooo0/p/11419839.html
2. https://blog.csdn.net/weixin_41999297/article/details/106751353