如何在Java中添加环境变量?

可能重复:
如何从Java设置环境变量?

我正在研究Java。 我必须在java代码编程中添加一个环境变量,这样当我使用流程构建器获取列表时它将可用,如下所示:

import java.util.Map; import java.util.Set; class helloworld { public static void main(String[] args) { ProcessBuilder pb = new ProcessBuilder("export MY_ENV_VAR=1"); Map envMap = pb.environment(); Set keys = envMap.keySet(); for(String key:keys){ System.out.println(key+" ==> "+envMap.get(key)); } } } 

但是通过上述试验,我无法正确获得环境变量。 那么如何设置环境变量?

  Map env = pb.environment(); env.put("MV_ENV_VAR", "1"); 

将设置MY_ENV_VAR = 1。 在调用Process by之前

 Process p = pb.start(); 

export只能由shell解释。

另请参见ProcessBuilder

一个完整的例子:

 public static void main(String[] args) throws IOException { ProcessBuilder pb = new ProcessBuilder("CMD", "/C", "SET"); Map env = pb.environment(); env.put("MYVAR", "myValue"); Process p = pb.start(); InputStreamReader isr = new InputStreamReader(p.getInputStream()); char[] buf = new char[1024]; while (!isr.ready()) { ; } while (isr.read(buf) != -1) { System.out.println(buf); } } 

打印其他环境值:

 MYVAR=myValue 

这应该certificate创建的进程使用受操纵的环境。

您可以使用流程Builder对象获取环境变量:

  ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2"); Map env = pb.environment(); env.put("VAR1", "myValue"); env.remove("OTHERVAR"); env.put("VAR2", env.get("VAR1") + "suffix"); 

您可以将所需的变量直接添加到ProcessBuilder.environment()映射中。 以下代码应该有效:

 import java.util.Map; import java.util.Set; class helloworld { public static void main(String[] args) { ProcessBuilder pb = new ProcessBuilder("/bin/sh"); // or any other program you want to run Map envMap = pb.environment(); envMap.put("MY_ENV_VAR", "1"); Set keys = envMap.keySet(); for(String key:keys){ System.out.println(key+" ==> "+envMap.get(key)); } } 

}

来自how-do-i-set-environment-variables-from-java

减轻负担的一种可能方法是分解方法

 void setUpEnvironment(ProcessBuilder builder) { Map env = builder.environment(); // blah blah } 

并在启动之前将任何ProcessBuilders传递ProcessBuilders它。

此外,您可能已经知道这一点,但您可以使用相同的ProcessBuilder启动多个进程。 因此,如果您的子进程相同,则无需反复进行此设置。