2011-09-15 10 views
9

System.getenv(name)には、環境変数の名前が必要です。Javaのすべての環境変数を列挙する方法

Runtime.exec(String[], String[], File),私はセカンダリパラメータに環境変数の配列が必要ですが、このパラメータを指定した場合、サブプロセスが現在のプロセスから環境変数を継承するかどうかはわかりません。

たとえば、new String[]{"NEWDIR=/home"}を第2パラメータとして渡し、現在のJavaプロセスに環境がOLDDIR=/varの場合、返される値はSystem.getenv("OLDDIR")となります。

更新: 申し訳ありませんが、私は、Java 1.4を使用する必要があり、System.getenv()は1.5で導入されたようですか?

+0

Java 1.4を使用する理由は何ですか?新しいバージョンのJavaは、下位互換性が素晴らしいです。アップグレードしてみましたか? – Bringer128

答えて

11

System.getenv()環境変数のすべてとMap<String,String>を返します。

しかし、新しいプロセスを開始するためのより便利なAPIであるProcessBuilderに簡単に切り替えることができます。

ProcessBuilderを使用すると、単にenvironment()を呼び出して取得Map含まその既存の環境変数をし、これを使用して、あなたが望むどのようを操作することができますすることができますつまり、あなたがそれに何かを追加した場合、その後、新しいに追加されること環境変数を処理します。そこから何かを削除すると、新しいプロセスにでなく、が存在します。

+0

すぐにお返事ありがとう、JAVA14でどうすればいいですか? – sevenever

+0

Java 5と 'Runtime.exec()'で導入された 'System.getenv()'と 'ProcessBuilder'は、未知の既存の環境変数を新しくマージする方法を許可していないので、指定されたもの。真剣に:その古代版を取り除く。 –

17
Map<String, String> env = System.getenv(); 
for (String envName : env.keySet()) { 
    System.out.format("%s=%s%n", envName, env.get(envName)); 
} 
1

外部シェルを実行する場合は、これを使用して環境変数を設定できます。例えば

bash -c ENV1=hi ENV2=bye echo $ENV1 $ENV2 

これは、UNIXのシェル(あるいはcygwinの)を持っている場合にのみ機能します

あなたは離れてのJava 1.4とJava 5.0から移行する必要があります。 Java 6でも、Java 7へのアップグレードを検討することがあります。

関連する問題