Javaのシステム値を取得する(System.getProperty)

java

javaのシステム固有値を取得する方法を解説します。この方法を覚えておくとカレントディレクトリや改行文字などJVMに依存している設定値を取得することが可能になります。
特にシステム構成が変わることで変更となる値については、プログラム中の定数に値を持たせず、この方法で値を取得しましょう。面倒な定数保守から開放されます(笑)

[スポンサーリンク]

この章でやること

System.getPropertyを使ってシステム設定値を取得する方法と、システム設定値の一覧を取得する方法を解説します。
過去自分の経験からシステム値として一番多く使う値はカレントディレクトリのパスになってくると思っています。このページではカレントディレクトリのパス取得方法にフォーカスをあてて解説していきます。

System.getPropertyを使ってカレントディレクトリのパスを取得する


    public static void main(String arg[]) {
        // カレントディレクトリのパスを取得します。
        String dir = System.getProperty("user.dir");
        System.out.println("ディレクトリ: " + dir);
    }

実行結果

>実行結果
ディレクトリ: C:\XXX\XXXXX

解説

System.getPropertyに「user.dir」を指定することでJavaプロジェクトのカレントディレクトリが取得出来ます。実行結果はそれぞれの実行環境のパスが取れます。
Junit等でファイルをフルパスで取得するときは、この方法であればJavaプロジェクトのパスが変わったとしてもプログラムに修正を加える必要がありません。

System.getPropertyを使ってシステム設定値の一覧を取得する


    public static void main(String arg[]) {
        // システムプロパティの一覧を表示します。
        Properties props = System.getProperties();
        props.list(System.out);
    }

実行結果

>実行結果
-- listing properties --
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=C:\jdk1.6.0_18\jre\bin
java.vm.version=16.0-b13
java.vm.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
path.separator=;
java.vm.name=Java HotSpot(TM) Client VM
file.encoding.pkg=sun.io
user.country=JP
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=
java.vm.specification.name=Java Virtual Machine Specification
user.dir=C:\XXX
java.runtime.version=1.6.0_18-b07
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=C:\jdk1.6.0_18\jre\lib\endorsed
os.arch=x86
java.io.tmpdir=C:\XXX
line.separator=
java.vm.specification.vendor=Sun Microsystems Inc.
user.variant=
os.name=Windows 7
sun.jnu.encoding=MS932
java.library.path=C:\jdk1.6.0_18\bin;.;C:\Windows\Sun\J...
java.specification.name=Java Platform API Specification
java.class.version=50.0
sun.management.compiler=HotSpot Client Compiler
os.version=6.1
user.home=C:\XXX
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=MS932
java.specification.version=1.6
user.name=XXX
java.class.path=C:\XXX
java.vm.specification.version=1.0
sun.arch.data.model=32
java.home=C:\jdk1.6.0_18\jre
java.specification.vendor=Sun Microsystems Inc.
user.language=ja
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode, sharing
java.version=1.6.0_18
java.ext.dirs=C:\jdk1.6.0_18\jre\lib\ext;C:\Windows...
sun.boot.class.path=C:\jdk1.6.0_18\jre\lib\resources.jar;...
java.vendor=Sun Microsystems Inc.
file.separator=\
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport...
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+m...

解説

System.getProperties()を使うことによって、javaシステム値を全て取得することが出来ます。最初に紹介した「user.dir」もSystem.getProperties()で取得した一覧に入っていますね。

最後に

System.getPropertyを使うことによって、環境毎に変わる値を定数で持つというわずらわしいことが無くなると私は思います。
特に「user.dir」の値は、ローカル環境と開発環境(テスト環境等)で異なってくるので、私はjunitを作成する際には非常に重宝しています。