我怎样才能在Java中获得系统variables值?

我怎样才能得到存在的系统variables值

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

在Java中?

编辑
我已经使用System.getenv()方法。

如果给我,是印刷价值

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

如果我为我创build的系统variables尝试相同的话,它显示null

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

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

为了澄清,系统variables与环境variables相同。 用户环境variables是为每个用户设置的,每当不同的用户login时都是不同的。无论用户login什么,系统环境variables都是相同的。

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

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

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

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

 echo %MYENVVAR% 

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

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

首先, System.getenv(String)是在回推时引入的,然后被弃用。 (愚蠢地说,IHMO)一直延续到JSE 1.4 。

它在JSE 5中被重新引入 。

这些是使用Windows中的“环境variables”面板进行设置的。 直到您的当前虚拟机closures,并且CMD.exe实例退出,variables可能不会被拿起。

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

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

这些属性可以在运行时进行修改,禁止安全策略限制。

其实这个variables是可以设置的,所以,在Java 8或者更高版本中,它的可空值应该被包装成一个Optional对象,这样就可以实现很好的特性。 在下面的例子中,我们将尝试获取variablesENV_VAR1 ,如果它不存在,我们可以抛出一些自定义exception来提醒它:

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

谷歌说看看getenv() :

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

我不确定系统variables和环境variables有什么不同,所以如果你能澄清我可以帮助更多。

你有没有尝试重新启动,因为你设置环境variables?

看起来,Windows在某种caching中保持环境variables,而重新引导是一种刷新它的方法。 我不确定,但可能有不同的方法,但如果你不会经常改变你的variables值,这可能就足够了。

正如上面提到的sombody,重新启动eclipse为我工作的用户定义的环境variables。 重新启动Eclipse IDE后, System.getenv()正在拾取我的环境variables。