【问题标题】:User environment variable in javajava中的用户环境变量
【发布时间】:2014-05-12 13:25:46
【问题描述】:

我正在尝试在 java 中获取用户环境变量。

System.getEnv() 方法只返回系统环境变量。

有人知道如何获取用户环境变量吗?

【问题讨论】:

  • 是的,我使用了 System.getenv("myvariable") 但它没有字。它仅适用于系统变量,不适用于用户变量
  • 对我来说效果很好,它甚至不区分大小写。注意:在 Windows 7 上。
  • 好吧,我不明白为什么它不适合我...我的变量名为 CODEAGENCE。在我的程序中System.getenv("CODEAGENCE") 返回null。例如System.getenv("CLASSPATH") 正确返回 CLASSPATH。
  • 您是否尝试过重新启动 Windows?此外,在设置环境变量时,您不一定要引用其他环境变量。你是如何设置变量的?

标签: java variables environment-variables


【解决方案1】:

当运行一个进程时,只有一个环境。用户变量被合并到系统变量中,并覆盖现有变量。然后通过System.getenv() 方法检索这个完整的环境。

所以你实际上看到了用户的环境变量。

我只是用这四个场景进行了测试:

1) 没有名为MYVAR的变量:

运行System.out.println(System.getenv("MYVAR")) 打印出null

2) 名为MYVAR 的系统变量,值为System

运行System.out.println(System.getenv("MYVAR")) 打印出System

3) 名为MYVAR 的用户变量,值为User

运行System.out.println(System.getenv("MYVAR")) 打印出User

4) 系统变量MYVAR 的值为System,用户变量MYVAR 的值为User

运行System.out.println(System.getenv("MYVAR")) 打印出User


也许您确实从 IDE(如 Eclipse)中尝试过?更改环境变量时,很遗憾您必须重新启动 Eclipse,因为它们没有正确传播到运行配置。

【讨论】:

    【解决方案2】:

    System.getenv(String)是正确的方法;只有“环境变量” - Windows 将“系统”环境变量应用于每个人的帐户,但它们在应用程序级别不可区分。您可以通过打开cmd 提示符并执行set(不带参数)来验证。

    【讨论】:

    • 在命令提示符下,我的变量没问题。 echo %myvariableM 给了我很好的价值。但是System.getenv("myvariable") 给我一个null
    【解决方案3】:

    您可以通过读取路径中的注册表项来获取 USER 环境变量的值:HKEY_CURRENT_USER\\Environment 在那里您会发现添加的所有 USER 环境变量。

    对于 SYSTEM 环境变量,您可以在路径中读取: HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment

    【讨论】:

    • 注册表访问不是一种常见的做法,Java 程序可以使用。
    猜你喜欢
    • 2012-11-05
    • 2015-08-20
    • 2015-09-16
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 2017-12-01
    相关资源
    最近更新 更多