Java> 读取系统属性System.getProperties()

如果想要在程序中,动态获取当前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 

原文地址:https://www.cnblogs.com/fortunely/p/14038262.html