11

重複の可能性:
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));
        }

    }
}

しかし、上記の試行では、環境変数を適切に取得できません。環境変数を設定する方法は?

4

4 に答える 4

9
 Map<String, String> env = pb.environment();
 env.put("MV_ENV_VAR", "1");

MY_ENV_VAR=1 を設定します。プロセスを呼び出す前に

Process p = pb.start();

exportシェルによってのみ解釈されます。

こちらもご覧ください

完全な例:

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);
    }
}

他の環境値の中に出力されます:

MYVAR=myValue

これにより、作成されたプロセスが操作された環境を使用することが証明されます。

于 2013-01-18T12:43:08.497 に答える
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));
    }

}

}

于 2013-01-18T12:45:31.953 に答える
3

プロセス Builder オブジェクトで環境変数を取得できます。

    ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
    Map<String, String> env = pb.environment();
    env.put("VAR1", "myValue");
    env.remove("OTHERVAR");
    env.put("VAR2", env.get("VAR1") + "suffix");
于 2013-01-18T12:45:27.847 に答える
1

How -do-i-set-environment-variables-from-java から

負担を軽減する可能な方法は、方法を除外することです

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

それらを開始する前にそれを通過ProcessBuildersします。

また、おそらくすでにこれを知っているでしょうが、同じ で複数のプロセスを開始できますProcessBuilder。したがって、サブプロセスが同じであれば、このセットアップを何度も行う必要はありません。

于 2013-01-18T12:50:02.573 に答える