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

BSa*_*nke 10 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<String, String> envMap = pb.environment();

        Set<String> keys = envMap.keySet();
        for(String key:keys){
            System.out.println(key+" ==> "+envMap.get(key));
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

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

sta*_*ker 9

 Map<String, String> env = pb.environment();
 env.put("MV_ENV_VAR", "1");
Run Code Online (Sandbox Code Playgroud)

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

Process p = pb.start();
Run Code Online (Sandbox Code Playgroud)

export 只会被shell解释.

另请参见ProcessBuilder

一个完整的例子:

public static void main(String[] args) throws IOException {

    ProcessBuilder pb = new ProcessBuilder("CMD", "/C", "SET");
    Map<String, String> 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

打印其他环境值:

MYVAR=myValue
Run Code Online (Sandbox Code Playgroud)

这应该证明创建的进程使用被操纵的环境.


小智 5

您可以将所需的变量直接添加到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<String, String> envMap = pb.environment();

    envMap.put("MY_ENV_VAR", "1");
    Set<String> keys = envMap.keySet();
    for(String key:keys){
        System.out.println(key+" ==> "+envMap.get(key));
    }

}
Run Code Online (Sandbox Code Playgroud)

}