环境变量(Env)和系统属性(Property)使用

一、引言

对于环境变量和系统属性,我们应该并不陌生,因为在安装JDK的时候需要配置环境变量,安装完之后我们需要查看JDK的版本,我们就需要使用查看系统属性。

但在Java代码中,我们应该如何去使用环境变量和系统属性呢?下面就来学习一下吧。

当我们在程序中需要使用与操作系统相关的变量(例如:文件分隔符、换行符)时,Java提供了System类的静态方法getenv()方法和getProperty()方法,用于返回系统相关的环境变量与系统属性。

getenv()方法返回的变量大多与操作系统相关;

getProperty()方法返回的变量大多与Java程序有关;

系统属性和环境变量都是key-value形式的,两种机制都能用来将用户定义的信息传递给 Java进程。

说明:环境变量产生更多的全局效应,因为它们不仅对Java子进程可见,而且对于定义它们的进程的所有子进程都是可见的,因此环境变量更可能有意料不到的副作用。程序中应该尽可能使用系统属性,环境变量应该在需要全局效应的时候使用,或者在外部系统接口要求使用环境变量时使用(比如 PATH)。

二、环境变量Env

使用 System.getenv() 获取系统的所有环境变量的Map,注意它是一个UnmodifiableCollection,是一个只读视图

环境变量并不提供set方法,即没有System.setEnvXXX()方法

    public static void main(String[] args) {
        Map<String, String> envMap = System.getenv();
        envMap.forEach((key, value) -> {
            System.out.println(key + "-->" + value);
        });
	}

这里 getenv() 这个方法并没有遵循驼峰规范,个人认为它是一种不规范的命名方式。

下面看输出结果:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

三、系统属性Property

系统属性的作用范围没那么大,所以Java是允许我们用API的方式.setProperty自己设置系统属性的。

public static void main(String[] args) {
    Properties properties = System.getProperties();
    System.setProperty("myProperty", "自定义的系统属性~"); // 允许自定义系统属性
    properties.forEach((key, value) -> {
        System.out.println(key + "-->" + value);
    });
}

下面看输出结果:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

四、总结

下面是对常用的,我们更关注的key做个总结。

环境变量:

环境变量
USERPROFILE用户目录
USERDNSDOMAIN用户域
PATHEXT可执行后缀
JAVA_HOMEJava安装目录
TEMP用户临时文件目录
SystemDrive系统盘符
ProgramFiles默认程序目录
USERDOMAIN帐户的域的名称
ALLUSERSPROFILE用户公共目录
SESSIONNAMESession名称
TMP临时目录
Pathpath环境变量
CLASSPATHclasspath环境变量
PROCESSOR_ARCHITECTURE处理器体系结构
OS操作系统类型
PROCESSOR_LEVEL处理级别
COMPUTERNAME计算机名
Windir系统安装目录
SystemRoot系统启动目录
USERNAME用户名
ComSpec命令行解释器可执行程序的准确路径
APPDATA应用程序数据目录

系统属性:

系统变量
java.version Java运行时环境版本
java.vendor Java运行时环境供应商
java.vendor.urlJava供应商的 URL
java.home   Java安装目录
java.vm.specification.versionJava虚拟机规范版本
java.vm.specification.vendorJava虚拟机规范供应
java.vm.specification.name  Java虚拟机规范名称
java.vm.versionJava虚拟机实现版本
java.vm.vendorJava虚拟机实现供应
java.vm.name Java虚拟机实现名称
java.specification.versionJava运行时环境规范版本
java.specification.vendorJava运行时环境规范供应商
java.specification.nameJava运行时环境规范名称
java.class.versionJava类格式版本号
java.class.pathJava类路径
java.library.path加载库时搜索的路径列表
java.io.tmpdir默认的临时文件路径
java.compiler要使用的 JIT编译器的名称
java.ext.dirs一个或多个扩展目录的路径
os.name操作系统的名称
os.arch操作系统的架构
os.version操作系统的版本
file.separator文件分隔符
path.separator路径分隔符
line.separator行分隔符
user.name用户的账户名称
user.home用户的主目录
user.dir用户的当前工作目录

补充一个知识点:

我们在SpringBoot项目中的配置文件中配置的值,默认都是加载到环境变量中,我们可以使用下面的方法试试看:

person.nickName='scorpios'

ConfigurableEnvironment environment = application.getEnvironment();
String property = environment.getProperty("person.nickName")

版权声明:本文为zxd1435513775原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。