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