【问题标题】:How to enumerate all environment variable in Java如何枚举Java中的所有环境变量
【发布时间】:2011-09-15 07:13:28
【问题描述】:

System.getenv(name)需要环境变量名。

我正在尝试调用Runtime.exec(String[], String[], File),辅助参数需要一个环境变量数组,如果我指定了这个参数,我不确定子进程是否会从当前进程继承环境变量。

例如,如果我将new String[]{"NEWDIR=/home"}作为辅助参数,并且当前java进程具有环境OLDDIR=/var,那么子进程中System.getenv("OLDDIR")的返回值是多少?

更新: 不好意思,我要用Java 1.4,好像System.getenv()是1.5引入的?

【问题讨论】:

  • 为什么必须使用 Java 1.4?较新版本的 Java 具有出色的向后兼容性 - 您是否尝试过升级?

标签: java environment


【解决方案1】:

System.getenv() 将返回一个包含所有环境变量的 Map<String,String>

但您也可以轻松切换到ProcessBuilder,这是一个更方便的 API 来启动新进程。

使用ProcessBuilder,您只需调用environment() 并获得一个Map,它包含现有的环境变量,并且您可以操作您想要的方式:即,如果您向其中添加一些内容,那么它将被添加到新的进程环境变量中。如果您从中删除某些内容,它将出现在新进程中。

【讨论】:

  • 感谢您的快速回复,在JAVA14我应该怎么做?
  • 那你就完蛋了,因为 System.getenv()ProcessBuilder 仅在 Java 5 中引入,Runtime.exec() 不允许将未知的现有环境变量与新指定的环境变量合并那些。说真的:摆脱那个古老的版本。
【解决方案2】:
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
    System.out.format("%s=%s%n", envName, env.get(envName));
}

【讨论】:

    【解决方案3】:

    如果您运行外部 shell,您可以使用它来设置环境变量。例如

    bash -c ENV1=hi ENV2=bye echo $ENV1 $ENV2
    

    这仅在您有 UNIX shell(或 cygwin)时才有效

    您应该从 Java 1.4 和 Java 5.0 迁移出去。即使是 Java 6,您也可以考虑升级到 Java 7。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      • 2011-01-17
      相关资源
      最近更新 更多