J2SE 1.4 を使用しているときに、Windows で環境変数の値を取得するための最良の/確実な方法は何ですか?
6 に答える
getEnv() を使用して環境変数を取得できます。
String variable = System.getenv("WINDIR");
System.out.println(variable);
getEnv() 関数はある時点で非推奨になったと思いますが、Java 1.5 では後で「非推奨」になりました。
到着予定時刻:
質問は特にJava 1.4に言及しているため、これは機能しません(または、少なくとも非推奨の警告が表示される可能性があります)。ただし、他の誰かがこの質問に出くわし、新しいバージョンを使用している場合に備えて、ここに回答を残します。
このための JVM への切り替えがあります。ここから:
「-D」スイッチを使用して JVM を起動し、プロパティをアプリケーションに渡し、System.getProperty() メソッドでそれらを読み取ります。
SET myvar=Hello world
SET myothervar=nothing
java -Dmyvar="%myvar%" -Dmyothervar="%myothervar%" myClass
次に myClass で
String myvar = System.getProperty("myvar");
String myothervar = System.getProperty("myothervar");
Java API から直接環境変数にアクセスする方法は絶対にありません。そのようなコードを使用して Runtime.exec でそれを達成する唯一の方法:
Process p = null;
Runtime r = Runtime.getRuntime();
String OS = System.getProperty("os.name").toLowerCase();
// System.out.println(OS);
if (OS.indexOf("windows 9") > -1) {
p = r.exec( "command.com /c set" );
}
else if ( (OS.indexOf("nt") > -1)
|| (OS.indexOf("windows 2000") > -1 )
|| (OS.indexOf("windows xp") > -1) ) {
// thanks to JuanFran for the xp fix!
p = r.exec( "cmd.exe /c set" );
}
System.getProperties(); のおかげで Java 変数にアクセスできますが。ただし、JVM 自体によってマップされたいくつかの環境変数と、"-Dkey=value" を使用して Java コマンド ラインで提供できる追加データのみを取得します。
詳細については、http://www.rgagnon.com/javadetails/java-0150.htmlを参照してください。
それらを -D システム プロパティとして JVM に渡します。次に例を示します。
java -D<java var>=%<environment var>%
そうすれば、特定の OS に縛られることはありません。
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
System.out.format("%s=%s%n", envName, env.get(envName));
}