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


169

我如何获得系统变量值

MyComputer -> Properties -> Advanced -> Environment Variables -> System Variables

在Java中?

编辑

我用过System.getenv()方法。

如果给的话印刷价值

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

null如果我尝试对我创建的系统变量进行相同的操作,它将显示出价值

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

5
您可以尝试重新启动请求过程(在我的情况下为NetBeans)。
Kotodid

3
我发现eclipse中的restart选项不起作用。只需关闭应用程序,然后重新启动即可。
Yasin

1
重新启动IntelliJ解决了我的问题。
Bhushan Karmarkar

重新启动对我有用的系统,可能是JVM在第一次启动时保留了值的高速缓存,这是因为未检测到新变量。
sumitkanoje

Answers:



52

为了明确起见,系统变量与环境变量相同。用户环境变量是为每个用户设置的,每当一个不同的用户登录时,该用户环境变量就不同。无论用户登录什么,系统范围的环境变量都是相同的。

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

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

有关环境变量的更多信息,请参见此Wikipedia页面

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

echo %MYENVVAR%

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


您好。我使用了System.getenv()方法。如果我给出“ System.out.println(System.getenv(“ JAVA_HOME”));“,它的打印值 并且如果我给我创建的系统变量,它显示为空值(“ System.out.println(System.getenv(” DBE“));”
raja

3
getenv应该是小写而不是getEnv对吗?
Pratik Khadloya 2014年

1
如果我这样做echo %var%打印%var%。如果我尝试改为echo $var运行,则显示该env变量的值。我getenv返回的是null。
Dialex '17

3
@dialex %var%用于Windows,$var用于unix / linux / MacOS系统。
Al-Mothafar '01

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

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


19

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

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

5

Google说要检出getenv()

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

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


我认为raja的意思是“整个系统”而不是“每个用户”的环境变量。
罗布

3

自设置环境变量以来,您是否尝试过重启?

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


3

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


0

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

myVar=testvalue; export myVar

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.