如何在 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>
命令行参数进行初始化。例如,maxInMemory
和 pagingDirectory
属性的值在以下命令中设置:
这些属性可以在运行时修改,除非有安全策略限制。
【讨论】:
【参考方案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 中获取系统变量值?的主要内容,如果未能解决你的问题,请参考以下文章