本文主要记录了一下通过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<>(/2 + 3);
// Read environment variables back to front,
// so that earlier variables override later ones.
for (int i = -1; i > 0; i-=2)
((environ[i-1]),
(environ[i]));
theUnmodifiableEnvironment
=
(new StringEnvironment(theEnvironment));
}
private static Properties props;
下面是一个demo实现的者两个方法的调用
public class EvnTest {
public static void main(String[] args) {
Map<String, String> getenv = ();
((key, value) -> {
(key + ":" + value);
});
("==========");
Properties properties = ();
("myProperty", "自定义的系统属性~"); // 允许自定义系统属性
((k, v) -> {
(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 :运行时环境版本
Java :运行时环境供应商
:Java供应商的 URL
:Java安装目录
: Java虚拟机规范版本
:Java虚拟机规范供应商
:Java虚拟机规范名称
:Java虚拟机实现版本
:Java虚拟机实现供应商
:Java虚拟机实现名称
:Java运行时环境规范版本
:Java运行时环境规范供应商
:Java运行时环境规范名称
:Java类格式版本号
:Java类路径
:加载库时搜索的路径列表
:默认的临时文件路径
:要使用的 JIT编译器的名称
:一个或多个扩展目录的路径
:操作系统的名称
:操作系统的架构
:操作系统的版本
:文件分隔符
:路径分隔符
:行分隔符
:用户的账户名称
:用户的主目录
:用户的当前工作目录
如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。