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

Posted

技术标签:

【中文标题】如何在 Java 中获取系统变量值?【英文标题】:How can I get System variable value in Java? 【发布时间】:2010-10-06 14:40:47 【问题描述】:

我怎样才能得到系统变量的值是存在于

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

在 Java 中?

编辑

我用过System.getenv()方法。

如果给的话就是印刷价值

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

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

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

【问题讨论】:

您可以尝试重新启动请求进程(在我的情况下为 NetBeans)。 我观察到 eclipse 的重启选项不起作用。只需关闭应用程序,然后重新启动即可。 重启 IntelliJ 解决了我的问题。 重启系统对我有用,可能是JVM在第一次启动时保留了值缓存,因为没有检测到新变量。 看起来 DBE 值没有导出 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

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

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

在调用 Java 之前,请确保您尝试读取的环境变量已正确设置,方法是:

echo %MYENVVAR%

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

【讨论】:

嗨..我已经使用了 System.getenv() 方法.. 如果我给出“System.out.println(System.getenv("JAVA_HOME"));”它的打印值如果我给我创建的系统变量(“System.out.println(System.getenv("DBE"));” getenv 应该是小写而不是getEnv 对吧? 如果我这样做echo %var%,它会打印%var%。如果我尝试改用echo $var,它会起作用并显示该环境变量的值。我的 getenv 返回 null。 @dialex %var% 用于 windows,$var 用于 unix / linux / MacOS 系统。【参考方案3】:

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

首先,System.getenv(String) 是在很久以前引入的,然后被弃用。弃用(愚蠢,IHMO)继续all the way into JSE 1.4。

它得到了re-introduced in JSE 5。

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

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

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

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

【讨论】:

【参考方案4】:

实际上变量可以设置也可以不设置,因此,在 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"));

【讨论】:

【参考方案5】:

谷歌说要签出getenv():

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

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

【讨论】:

我认为 raja 的意思是“系统范围”而不是“每个用户”环境变量。【参考方案6】:

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

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

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

myVar=testvalue; export myVar

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

【讨论】:

以上是关于如何在 Java 中获取系统变量值?的主要内容,如果未能解决你的问题,请参考以下文章

java中classpath如何配置?

如何配置java环境变量以及myeclipse连接数据库mysql

JDK环境变量配置

Java 怎么设置环境变量

JDK环境变量中dt.jartools.jar变量值的作用

java环境变量