如何在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。