WindowsやUNIXには環境変数と呼ばれる物があります。環境変数とはそのOSで実行されるプログラムすべてが参照できる設定で、文字列によって定義されています。当然OSやプラットフォームによって異なっているため、Javaでは推奨されたものではありませんが、ユーザー名を自動で取得するなど、プログラムにとっては必要不可欠な場合もありますので紹介します。
Systemクラスのgetenvメソッドを用います。
public class Test {
public static void main(String args[]) {
String s = System.getenv("USERNAME");
System.out.println(s);
}
}
|
このプログラムをコンパイルするとwarningが表示されます。これは推奨されないメソッドだからです。
このプログラムをWindowsで実行するとログインIDが表示されます。しかしUNIXで実行させるとnullが表示されます。これはUNIXでユーザー名が定義されている環境変数はUSERだからです。このようにプラットフォームが異なるとうまく動作しない場合があります。
public class Test {
public static void main(String args[]) {
String s;
s = System.getenv("USERNAME");
if( s == null )
s = System.getenv("USER");
System.out.println(s);
}
}
|
このようにすることでUNIXやWindowsでは一応動作させることは可能ですが、別の意味で環境変数が定義されていると誤動作の原因にもなりますし、他のOSでは動作しません。そこで
public class Test {
public static void main(String args[]) {
String s;
s = System.getenv(args[0]);
System.out.println(s);
}
}
|
C:\java>java Test username
administrator
C:\java>
|
として、引数に環境変数名を指定するか、
public class Test {
public static void main(String args[]) {
String s;
s = System.getenv(System.getProperty("localuser"));
System.out.println(s);
}
}
|
C:\java>java -Dlocaluser=username Test
administrator
C:\java>
|
として、プロパティを指定するかします。
また、同様の方法で環境変数の中身を渡してしまう方法も採用されます。
しかし、これらの方法を用いてもOSに依存していることには変わりません。実はユーザー名はJavaで標準で用意されている方法で取得ができるのです。
public class Test {
public static void main(String args[]) {
String s = System.getProperty("user.name");
System.out.println(s);
}
}
|
C:\java>java Test
administrator
C:\java>
|