我怎样才能在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
命令行参数进行初始化。 例如,属性maxInMemory
和pagingDirectory
的值在下面的命令中设置:
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。