【Java】システムプロパティの扱い方について(System.getProperty)

スポンサーリンク

Java でシステムプロパティの扱い方についてまとめました。

システムプロパティの取得方法

Java の実行時に設定されるシステムプロパティーからは、プロジェクトのカレントディレクトリや改行文字、OSの名前やバージョンなどの情報が取得できます。システムプロパティにデフォルトでセットされる値については  System.getProperties (Java Platform SE 8) を参照してください。

メソッド 機能
System.getProperties() 全てのプロパティを取得。
System.getProperty("key") 指定されたキーのプロパティを取得。
System.getProperty("key", "default") 指定されたキーのプロパティを取得。無ければデフォルト値。

実際にプロパティ値を確認したい場合はSystem.getProperties()で全プロパティを取得できます。

public class SystemPropertiesSample {
    public static void main(String[] args) {
        Properties properties = System.getProperties();
        properties.list(System.out);
    }
}

以下のようにプロパティが表示されます。(多いので一部省略)

-- listing properties --
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=/Library/Java/JavaVirtualMachines/jdk...
java.vm.version=25.45-b02
gopherProxySet=false
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
...

特定のキーを指定してプロパティを取得します。

String dir = System.getProperty("user.dir");
System.out.println("user.dir=" + dir);
// 結果
user.dir=/Users/tasukujp/Documents/properties

存在しないキーを指定した場合は戻り値が null になるので、デフォルト値を指定することで回避できます。

String hoge = System.getProperty("hoge");
System.out.println("hoge=" + dir);
String hoge = System.getProperty("hoge", "default");
System.out.println("hoge=" + dir);
// 結果
hoge=null
hoge=default

システムプロパティの設定方法

デフォルトのシステムプロパティだけでなく、独自に設定したい場合は以下の方法があります。

メソッド 機能
-Dオプション Java コマンド実行時に指定。
System.setProperties(Properties props) Properties インスタンスでプロパティを設定。
System.setProperty("key", "value") 指定したキーと値のプロパティを設定。
System.clearProperty("key") プロパティを削除。

java コマンドの実行時に-Dオプションを付けることでシステムプロパティを設定することができます。

public class SystemPropertiesSample {
    public static void main(String[] args) {
        String dir = System.getProperty("my.property");
        System.out.println("my.property=" + dir);
    }
}

以下のようにオプションを指定して実行します。

$ javac SystemPropertiesSample.java
$ java -Dmy.property=test SystemPropertiesSample
my.property=test

キーと値を指定してプロパティを設定します。

System.out.println(System.getProperty("my.property"));
System.setProperty("my.property", "test");
System.out.println(System.getProperty("my.property"));
// 結果
null
test

Properties インスタンスでまとめて設定することも可能です。

Properties properties = new Properties();
properties.setProperty("hoge", "fuga");
properties.setProperty("bar", "foo");
System.setProperties(properties);
System.out.println(System.getProperty("hoge"));
System.out.println(System.getProperty("bar"));
// 結果
fuga
foo

システムプロパティを取得したくない場合は削除します。null は設定できません。

System.clearProperty("user.dir");
System.out.println(System.getProperty("user.dir"));
// 結果
null