Windowsにおいて、Javaプログラムからユーザのホームディレクトリを取得する方法
開発したアプリケーションで扱う設定ファイルやデータは ユーザに依存した情報なので、ユーザのホームディレクトリに保存するのが行儀の良い作法です。
Windows でユーザのホームディレクトリを取得する
WindowsXPなどでは、コマンドプロンプトなどで 以下のようにすると、ホームディレクトリが表示されます。 (ユーザ名:foo の場合)
> echo %USERPROFILE%
C:\Documents and Settings\foo
ですから、開発したアプリケーションは、この%USERPROFILE% という変数を使って 各種設定ファイル・データの保存場所を決めればよい。
しかし、Javaで書いたアプリケーションの場合、 %USERPROFILE% という変数に(たぶん)アクセスできないので どうすればいいのだろう、とかなり前から悩んでいたのだが、 最近になって、java.lang.System クラスの getProperty() メソッド経由で この値が取得できることが判明。
具体的には次のようにすればよい。
具体的な方法
System.getProperty()メソッドでユーザのホームディレクトリを取得。
String userProfile=System.getProperty("user.home");
System.out.println( userProfile );
その他にも実行環境(OS)に依存したさまざまな情報が System.getProperty()メソッドを使って取得できることが判明。
今までは、テキストファイルの改行コードの取得に System.getProperty("line.separator"); と、するということは知っていたが、それ以上のことを意識したことがなかった。
そこで、System.getProperty()メソッドから、どんな情報が取得できるのか 調べてみた。
import java.util.*;
public class Test{
public static void main(String[] s){
Properties hash=System.getProperties();
Enumeration enu=hash.keys();
while(enu.hasMoreElements()){
Object key=enu.nextElement();
System.out.println(key+"\t\t"+System.getProperty((String)key));
}
}
}
このコードをTest.javaで保存して、
$ javac Test.java
$ java Test
とすれば大量の環境情報がコンソールに標準出力されます。