您当前的位置: 首页 > 

止步前行

暂无认证

  • 0浏览

    0关注

    247博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

止步前行 发布时间:2020-12-16 09:15:32 ,浏览量:0

一、引言

对于环境变量和系统属性,我们应该并不陌生,因为在安装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 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供应商的 URLjava.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")
关注
打赏
1657848381
查看更多评论
立即登录/注册

微信扫码登录

0.0400s