如何在Java中获取系统变量值?
如何获取中存在的系统变量值如何在Java中获取系统变量值?,java,environment-variables,Java,Environment Variables,如何获取中存在的系统变量值 MyComputer -> Properties -> Advanced -> Environment Variables -> System Variables 在爪哇 编辑 我使用了System.getenv()方法 如果我给你钱,那就是印刷价值 System.out.println(System.getenv("JAVA_HOME")); 如果我对自己创建的系统变量尝试相同的方法,它将显示null值 System.out.printl
MyComputer -> Properties -> Advanced -> Environment Variables -> System Variables
在爪哇
编辑
我使用了System.getenv()
方法
如果我给你钱,那就是印刷价值
System.out.println(System.getenv("JAVA_HOME"));
如果我对自己创建的系统变量尝试相同的方法,它将显示null
值
System.out.println(System.getenv("DBE"));
使用该方法,传递要读取的变量名称。谷歌说要签出:
返回当前系统环境的不可修改字符串映射视图
但是,我不确定系统变量与环境变量有何不同,因此如果您能澄清,我可以提供更多帮助。为了澄清,系统变量与环境变量相同。用户环境变量是按用户设置的,并且每当不同的用户登录时,这些变量都是不同的。无论用户登录什么,系统范围内的环境变量都是相同的 要访问Java中的系统范围变量或用户变量的当前值,请参阅以下内容:
String javaHome = System.getenv("JAVA_HOME");
有关环境变量的更多信息,请参见此
另外,在调用Java之前,通过执行以下操作确保您尝试读取的环境变量已正确设置:
echo %MYENVVAR%
您应该看到环境变量的值。如果没有,您可能需要重新打开shell(DOS)或注销并重新登录。设置环境变量后是否尝试重新启动
Windows似乎将其环境变量保存在某种缓存中,而重新启动是刷新它的一种方法。我不确定,但可能有不同的方法,但如果您不打算太频繁地更改变量值,这可能就足够了。在获取系统/环境属性时,有一些有趣的细节 首先,
System.getenv(String)
早在很久以前就被引入了,后来就被弃用了。反对声(愚蠢地,IHMO)还在继续
它得到了
这些是使用Windows中的“环境变量”面板设置的。在关闭当前VM并退出CMD.exe实例之前,可能无法获取对变量的更改
与环境属性不同,Java还具有Java系统属性,可通过访问。当VM启动时,可以使用一系列-Dname=value
命令行参数初始化这些变量。例如,在下面的命令中设置属性maxInMemory
和pagindirectory
的值:
C:\> java.exe -DmaxInMemory=100M -DpagingDirectory=c:\temp -jar myApp.jar
C:\>java.exe-DmaxInMemory=100M-DpagingDirectory=C:\temp-jar myApp.jar
这些属性可以在运行时修改,不受安全策略限制。实际上,变量可以设置也可以不设置,因此,在Java 8或更高版本中,它的可空值应该包装到一个
可选的
对象中,这允许非常好的特性。在下面的示例中,我们将尝试获取变量ENV_VAR1
,如果它不存在,我们可能会抛出一些自定义异常来警告它:
String ENV_VAR1 = Optional.ofNullable(System.getenv("ENV_VAR1")).orElseThrow(
() -> new CustomException("ENV_VAR1 is not set in the environment"));
正如上面sombody所提到的,对于用户定义的环境变量,重启eclipse对我来说是有效的。
重新启动EclipseIDE后,
System.getenv()
正在提取我的环境变量。您是在linux系统上吗?如果是,请确保您正在导出变量
myVar=testvalue; export myVar
除非使用export全局定义值,否则我会得到null。我认为raja的意思是“系统范围”,而不是“每个用户”的环境变量。您好。。我使用了System.getenv()方法。。如果我给出“System.out.println(System.getenv(“JAVA_HOME”));”它的打印值,如果我给出我创建的系统变量(“System.out.println(System.getenv(“DBE”)”),它的显示为空值
getenv
应该是小写的,而不是getenv
对吗?如果我这样做echo%var%
它会打印%var%
。如果我尝试echo$var
它会工作并显示该env变量的值。我的getenv
返回空值。@dialex%var%
用于windows,$var
用于unix/linux/MacOS系统。您可以尝试重新启动请求进程(在我的例子中是NetBeans)。我观察到eclipse的重新启动选项不起作用。只需关闭应用程序,然后重新启动。重新启动IntelliJ解决了我的问题。重新启动系统对我有效,可能是JVM在第一次启动时保留了值缓存,因此未检测到新变量。看起来DBE值未导出