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

raj*_*aja 153 java environment-variables

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

System.getenv()

在Java?

编辑
我用过的null方法.

如果我给,它是印刷价值

MyComputer -> Properties -> Advanced -> Environment Variables -> System Variables
Run Code Online (Sandbox Code Playgroud)

System.getenv()如果我对我创建的系统变量尝试相同的话,它就会显示出来

System.out.println(System.getenv("JAVA_HOME"));
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 171

使用该System.getenv(String)方法,传递要读取的变量的名称.


Eli*_*jah 51

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

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

String javaHome = System.getenv("JAVA_HOME");
Run Code Online (Sandbox Code Playgroud)

有关环境变量的更多信息,请参阅此维基百科页面.

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

echo %MYENVVAR%
Run Code Online (Sandbox Code Playgroud)

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

  • `getenv`应该是小的而不是`getEnv`对吗? (3认同)
  • @dialex`%var%`用于windows,`$ var`用于unix/linux/MacOS系统. (3认同)
  • 如果我执行 `echo %var%`,它会打印 `%var%`。如果我尝试改为`echo $var`,它会起作用并显示该环境变量的值。我的`getenv` 返回空值。 (2认同)

Dil*_*nga 27

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

首先,System.getenv(String)介绍了回溯时间,然后弃用.弃用(愚蠢地,IHMO)一直持续到JSE 1.4.

在JSE 5中重新引入.

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

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

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

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


Eli*_*iuX 17

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

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


Chr*_*nch 5

Google表示要查看getenv():

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

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


小智 5

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

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