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 = v();
getenv.forEach((key, value) -> {
System.out.println(key + ":" + value);
});
System.out.println("==========");
Properties properties = Properties();
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   :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环境变量自动配置java.specification.vendor:Java运⾏时环境规范供应商
java.specification.name :Java运⾏时环境规范名称
java.class.version :Java类格式版本号
java.class.path :Java类路径
java.library.path  :加载库时搜索的路径列表
pdir  :默认的临时⽂件路径
javapiler  :要使⽤的 JIT编译器的名称
os.name :操作系统的名称
os.arch  :操作系统的架构
os.version  :操作系统的版本
file.separator :⽂件分隔符
path.separator :路径分隔符
line.separator :⾏分隔符
user.name :⽤户的账户名称
user.home :⽤户的主⽬录
user.dir:⽤户的当前⼯作⽬录
如果觉得本⽂对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努⼒创作更多更好的⽂章。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。