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

本文主要记录了一下通过java程序实现查询系统属性和环境变量的方法,方便以后的查阅。

下面就记录一下查询这些属性的方法。


java中有一个System类这里有两个重要的方法实现环境变量getenv方法(不是驼峰,不知道为啥没有按照规范命名)和系统属性的查询(getProperty方法)。

  • getenv方法返回的变量大多与操作系统相关
  • getProperty方法返回的变量大多与java程序有关

这两种方法的返回值都是k,v形式的。

我们可以通过调用这两个方法查询系统的属性和环境变量,其中property方法的作用范围相对来说更小一些,java的system类给我们提供了set方法,这样我们就能自定义系统属性了。

注意:

值得注意的getenv返回的是它是一个UnmodifiableCollection,是一个只读视图他的定义如下

private static final Map<String,String> theUnmodifiableEnvironment;

被final修饰了所以不能修改

在ProcessEnvironment加载的时候行初始化操作,其中主要是通过environ()方法加载系统的属性,这个方法是native方法是c实现的。

首先缓存 C 环境。这意味着从 C 中对 putenv/setenv 的后续调用在 Java 代码中将不可见

将环境变量读回前面,以便较早的变量覆盖后面的变量。这样就获取到了系统变量。

    private static final HashMap<Variable,Value> theEnvironment;
    private static final Map<String,String> theUnmodifiableEnvironment;
static {
        // We cache the C environment.  This means that subsequent calls
        // to putenv/setenv from C will not be visible from Java code.
        byte[][] environ = environ();
        theEnvironment = new HashMap<>(environ.length/2 + 3);
        // Read environment variables back to front,
        // so that earlier variables override later ones.
        for (int i = environ.length-1; i > 0; i-=2)
            theEnvironment.put(Variable.valueOf(environ[i-1]),
                               Value.valueOf(environ[i]));

        theUnmodifiableEnvironment
            = Collections.unmodifiableMap
            (new StringEnvironment(theEnvironment));
    }

 

private static Properties props;

下面是一个demo实现的者两个方法的调用

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

        properties.forEach((k, v) -> {
            System.out.println(k + "===" + v);
        });
    }
}

由于打印的数据很多这里就不做详细的粘贴了,只把一些重要的属性和变量整理出来

环境变量

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

系统属性

java.version Java :运行时环境版本
java.vendor Java :运行时环境供应商
java.vendor.url :Java供应商的 URL
java.home &nbsp;&nbsp;:Java安装目录
java.vm.specification.version: Java虚拟机规范版本
java.vm.specification.vendor :Java虚拟机规范供应商
java.vm.specification.name &nbsp; :Java虚拟机规范名称
java.vm.version :Java虚拟机实现版本
java.vm.vendor :Java虚拟机实现供应商
java.vm.name&nbsp; :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 :文件分隔符
path.separator :路径分隔符
line.separator :行分隔符
user.name :用户的账户名称
user.home :用户的主目录
user.dir:用户的当前工作目录

如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智达教育‍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值