System.getenv(name)
需要环境变量的名称。
我试图调用Runtime.exec(String[], String[], File),
辅助参数需要一个环境变量数组,如果我指定了这个参数,我不确定子进程是否会从当前进程继承环境变量。
例如,如果我将new String[]{"NEWDIR=/home"}
作为辅助参数传递,而当前的java进程具有环境OLDDIR=/var
,那么子进程中System.getenv("OLDDIR")
的返回值是多少?
更新的 对不起,我必须使用Java 1.4,似乎{1}}是在1.5?
中引入的答案 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。