如何在Java中获取System变量值?

时间:2009-02-10 09:45:34

标签: java environment-variables

如何获取

中存在的系统变量值
MyComputer -> Properties -> Advanced -> Environment Variables -> System Variables
在Java中

修改

我使用了System.getenv()方法。

如果我给出

,那就是打印价值
System.out.println(System.getenv("JAVA_HOME"));

如果我为我创建的系统变量尝试相同的话,它会显示null

System.out.println(System.getenv("DBE"));

8 个答案:

答案 0 :(得分:147)

使用System.getenv(String)方法,将变量名称传递给读。

答案 1 :(得分:49)

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

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

String javaHome = System.getenv("JAVA_HOME");

有关环境变量的更多信息,请参阅此wikipedia page

还要确保在调用Java之前正确设置了您尝试读取的环境变量:

echo %MYENVVAR%

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

答案 2 :(得分:23)

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

首先,System.getenv(String)被引入回溯时,然后弃用。弃用(愚蠢地,IHMO)继续all the way into JSE 1.4

得到了re-introduced in JSE 5

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

与环境属性相比,Java还具有Java系统属性,可通过System.getProperties()访问。使用系列-Dname=value命令行参数启动VM时,可以初始化这些变量。例如,属性maxInMemorypagingDirectory的值在以下命令中设置:

C:\> java.exe -DmaxInMemory=100M -DpagingDirectory=c:\temp -jar myApp.jar

除非安全策略限制,否则可以在运行时修改这些属性。

答案 3 :(得分:12)

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

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

答案 4 :(得分:5)

Google表示要查看getenv()

  

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

但是,我不确定系统变量与环境变量的区别,所以如果你能澄清我可以提供更多帮助。

答案 5 :(得分:3)

如上面的sombody所述,重新启动eclipse对我来说是用户定义的环境变量。 在我重新启动eclipse IDE之后,System.getenv()正在拾取我的环境变量。

答案 6 :(得分:1)

您是否尝试过设置环境变量后重启?

似乎Windows在某种缓存中保留了它的环境变量,重启是一种刷新它的方法。我不确定但可能有不同的方法,但如果你不太经常改变你的变量值,这可能就足够了。

答案 7 :(得分:0)

您在Linux系统上吗?如果是这样,请确保您正在导出变量。

myVar=testvalue; export myVar

除非使用export全局定义值,否则将为null。