如何在Java中枚举所有环境变量

时间:2011-09-15 07:13:29

标签: java environment

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

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

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

更新的 对不起,我必须使用Java 1.4,似乎{1}}是在1.5?

中引入的

3 个答案:

答案 0 :(得分:32)

Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
    System.out.format("%s=%s%n", envName, env.get(envName));
}

答案 1 :(得分:21)

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

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

使用ProcessBuilder,您只需致电environment()并获取Map 包含现有环境变量,您可以操纵你想要的方式:即,如果你向它添加一些内容,那么它将被添加到新的进程环境变量中。如果您从中删除了某些内容,则 将不会出现在新进程中。

答案 2 :(得分:1)

如果运行外部shell,则可以使用它来设置环境变量。 e.g。

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

仅当您拥有UNIX shell(或cygwin)

时才有效

您应该远离Java 1.4和Java 5.0。即使是Java 6,您也可以考虑升级到Java 7。