【问题标题】:How can I get System variable value in Java?如何在 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 值没有导出

标签: java environment-variables


【解决方案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。

            【讨论】:

              猜你喜欢
              • 2018-10-26
              • 2015-12-11
              • 2012-11-05
              • 2013-06-17
              • 2012-04-18
              • 2015-03-16
              • 1970-01-01
              • 1970-01-01
              • 2011-06-24
              相关资源
              最近更新 更多