Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中获取系统变量值?_Java_Environment Variables - Fatal编程技术网

如何在Java中获取系统变量值?

如何在Java中获取系统变量值?,java,environment-variables,Java,Environment Variables,如何获取中存在的系统变量值 MyComputer -> Properties -> Advanced -> Environment Variables -> System Variables 在爪哇 编辑 我使用了System.getenv()方法 如果我给你钱,那就是印刷价值 System.out.println(System.getenv("JAVA_HOME")); 如果我对自己创建的系统变量尝试相同的方法,它将显示null值 System.out.printl

如何获取中存在的系统变量值

MyComputer -> Properties -> Advanced -> Environment Variables -> System Variables
在爪哇

编辑

我使用了
System.getenv()
方法

如果我给你钱,那就是印刷价值

System.out.println(System.getenv("JAVA_HOME"));
如果我对自己创建的系统变量尝试相同的方法,它将显示
null

System.out.println(System.getenv("DBE"));
使用该方法,传递要读取的变量名称。

谷歌说要签出:

返回当前系统环境的不可修改字符串映射视图


但是,我不确定系统变量与环境变量有何不同,因此如果您能澄清,我可以提供更多帮助。

为了澄清,系统变量与环境变量相同。用户环境变量是按用户设置的,并且每当不同的用户登录时,这些变量都是不同的。无论用户登录什么,系统范围内的环境变量都是相同的

要访问Java中的系统范围变量或用户变量的当前值,请参阅以下内容:

String javaHome = System.getenv("JAVA_HOME");
有关环境变量的更多信息,请参见此

另外,在调用Java之前,通过执行以下操作确保您尝试读取的环境变量已正确设置:

echo %MYENVVAR%

您应该看到环境变量的值。如果没有,您可能需要重新打开shell(DOS)或注销并重新登录。

设置环境变量后是否尝试重新启动


Windows似乎将其环境变量保存在某种缓存中,而重新启动是刷新它的一种方法。我不确定,但可能有不同的方法,但如果您不打算太频繁地更改变量值,这可能就足够了。

在获取系统/环境属性时,有一些有趣的细节

首先,
System.getenv(String)
早在很久以前就被引入了,后来就被弃用了。反对声(愚蠢地,IHMO)还在继续

它得到了

这些是使用Windows中的“环境变量”面板设置的。在关闭当前VM并退出CMD.exe实例之前,可能无法获取对变量的更改

与环境属性不同,Java还具有Java系统属性,可通过访问。当VM启动时,可以使用一系列
-Dname=value
命令行参数初始化这些变量。例如,在下面的命令中设置属性
maxInMemory
pagindirectory
的值:

C:\> java.exe -DmaxInMemory=100M -DpagingDirectory=c:\temp -jar myApp.jar C:\>java.exe-DmaxInMemory=100M-DpagingDirectory=C:\temp-jar myApp.jar
这些属性可以在运行时修改,不受安全策略限制。

实际上,变量可以设置也可以不设置,因此,在Java 8或更高版本中,它的可空值应该包装到一个
可选的
对象中,这允许非常好的特性。在下面的示例中,我们将尝试获取变量
ENV_VAR1
,如果它不存在,我们可能会抛出一些自定义异常来警告它:

String ENV_VAR1 = Optional.ofNullable(System.getenv("ENV_VAR1")).orElseThrow(
  () -> new CustomException("ENV_VAR1 is not set in the environment"));

正如上面sombody所提到的,对于用户定义的环境变量,重启eclipse对我来说是有效的。
重新启动EclipseIDE后,
System.getenv()
正在提取我的环境变量。

您是在linux系统上吗?如果是,请确保您正在导出变量

myVar=testvalue; export myVar

除非使用export全局定义值,否则我会得到null。

我认为raja的意思是“系统范围”,而不是“每个用户”的环境变量。您好。。我使用了System.getenv()方法。。如果我给出“System.out.println(System.getenv(“JAVA_HOME”));”它的打印值,如果我给出我创建的系统变量(“System.out.println(System.getenv(“DBE”)”),它的显示为空值
getenv
应该是小写的,而不是
getenv
对吗?如果我这样做
echo%var%
它会打印
%var%
。如果我尝试
echo$var
它会工作并显示该env变量的值。我的
getenv
返回空值。@dialex
%var%
用于windows,
$var
用于unix/linux/MacOS系统。您可以尝试重新启动请求进程(在我的例子中是NetBeans)。我观察到eclipse的重新启动选项不起作用。只需关闭应用程序,然后重新启动。重新启动IntelliJ解决了我的问题。重新启动系统对我有效,可能是JVM在第一次启动时保留了值缓存,因此未检测到新变量。看起来DBE值未导出