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

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

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

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

更新:对不起,我必须使用Java 1.4,似乎System.getenv()是在1.5中引入的?

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

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

使用ProcessBuilder您可以简单地调用environment()并获取包含现有环境变量Map ,您可以根据需要操作它:即,如果您向其添加内容,则会将其添加到新的流程环境变量中。 如果您从中删除了某些内容,它将不会出现在新进程中。

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

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

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

这仅适用于您拥有UNIX shell(或cygwin)的情况

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