Previous | Next | Trail Map | Writing Java Programs | システム資源の使用


システムプロパティ

System クラスは、現在の作業環境の特徴あるいは属性を定義するプロパティのセット(キーと値のペア)を維持する。 実行時システムを最初に開始すると、システムプロパティは実行時環境についての情報を得るために初期化される。この情報には、現行ユーザの情報、Java 実行時の現行バージョン、およびファイル名の構成要素を分離するために使用される文字まで含まれる。

次は、実行時システムが最初に開始したときに得られるシステムプロパティとその意味を示すリストである。

キー                   意味

-------------------     ------------------------------
"file.separator"        ファイル区切り文字 (例 "/")
"java.class.path"       Java クラスパス
"java.class.version"    Java クラスバージョン
"java.home"             Java インストールディレクトリ
"java.vendor"           Java ベンダー固有の文字列

"java.vendor.url"       Java ベンダー URL
"java.version"          Java バージョン
"line.separator"        行区切り文字
"os.arch"               オペレーティングシステム・アーキテクチャ
"os.name"               オペレーティングシステム名

"path.separator"        パス区切り文字 (例 ":")
"user.dir"              ユーザの現在の作業ディレクトリ
"user.home"             ユーザのホームディレクトリ
"user.name"             ユーザアカウント名

Java プログラムは System クラスのメソッドを使って、システムプロパティを読み取ったり書き込むことができる。 properties リストでプロパティを調べるためにキーを使用する。あるいはプロパティのセット全体を得ることができる。 同様にシステムプロパティのセットを完全に変更することができる。


注釈: Applets はすべてではないが、いくつかのシステムプロパティをアクセスすることができる。 アプレットにより使用可能および不可能なシステムプロパティのリストについては、 システムプロパティの読み取り(in the Writing Applets trail)を参照のこと。アプレットはシステムプロパティに書き込むことはできない。

システムプロパティの読み取り

System クラスには、システムプロパティを読み込むために使用することができる、 getProperty()getProperties()の2つのメソッドがある。

System クラスには、引数リストで指定されたプロパティの値を検索する getProperty() の2つの異なるバージョンがある。 2つの getProperty() メソッドのもっともシンプルなものは、検索したいプロパティのキーである引数を一つ取る。 例えば、 path.separator の値を得るためには、次の文を使用する。

System.getProperty("path.separator");

getProperty() メソッドはプロパティの値を含んでいる文字列を返す。 もしプロパティが存在しないなら、1引数の getProperty() は null を返す。

次にもう一つのバージョンの getProperty() について説明する。 このバージョンでは2つの String 引数を必要とする。1番目の引数は検索するべきキーである。2番目の引数は、キーが見つからないあるいは値がない場合に、返すべきデフォルト値である。 例えば、 getProperty() を呼び出し、subliminal.message と呼ばれるSystem プロパティを調べる。 これは正しいシステムプロパティではない。そこで null を返す代わりに、このメソッドが 2 番目の引数であるデフォルト値 Buy Java Now! を返す。

System.getProperty("subliminal.message", "Buy Java Now!"
);

NullPointerException の危険を冒したくない、あるいは値を持たなかったり見つけられないプロパティのデフォルト値を提供したければ、getProperty() を使用する。

プロパティ値にアクセスするために System クラスが提供する最後のメソッドは、システムプロパティのキーと値のペアの完全なセットを含む プロパティ(in the API reference documentation)オブジェクトを返す getProperties() メソッドである。 指定された値のプロパティオブジェクトを問い合わせたり、あるいはプロパティのすべてのセットを表示するために、種々のPropertiesクラスメソッドが用意される。 Properties クラスについての情報については、 プロパティの設定と使用(in the API reference documentation)を参照のこと。

システムプロパティの書き方

System の setProperties() メソッドを使用しシステムプロパティの既存のセットを変更することができる。 このメソッドは、設定したいプロパティのキーと値のペアを得るために初期化された Properties オブジェクトをとる。 したがってこのメソッドは、 Properties オブジェクトで表される新規のセットでシステムプロパティのすべてのセットを置換する。

Properties オブジェクトを作成して、ファイルmyProperties.txtにより初期化するプログラム例を示す。 プログラム例では、システムプロパティの現在のセットとして新規の Properties オブジェクトをインストールするために、 System.setProperties() を使用する。

import java.io.FileInputStream;
import java.util.Properties;

class PropertiesTest {
    public static void main(String args[]) {
        try {
                // set up new properties object from file "myProperties.txt"
            FileInputStream propFile = new FileInputStream("myProperties.txt");
            Properties p = new Properties(System.getProperties());
            p.load(propFile);

                // set the system properties
            System.setProperties(p);
            System.getProperties().list(System.out);
        } catch (java.io.FileNotFoundException e) {
            ;
        } catch (java.io.IOException e) {
            ;
        }
    }
}

例で Properties オブジェクト p がどのように作成されるか注意すること。 p setProperties()に引数として使用される。

Properties p = new Properties(System.getProperties());

このプログラムにおいて、上記の文は新しい Properties オブジェクトを現在のシステムプロパティのセットとして初期化する。p は実行時システムにより初期化されたプロパティセットである。プログラムは、ファイル myProperties.txt から p に追加のプロパティをロードし、システムプロパティを p にセットする。 これは、スタートアップにおいて実行時システムが作成するプロパティセットに、 myProperties.txt で表示したプロパティを追加する効果がある。 テストプログラムは、プロパティが実行時システムにより初期化されるように保護している。 ユーザのアプリケーションは多分同じことをすべきであろう。

setProperties() メソッドは、現在実行中アプリケーションに対してシステムプロパティのセットを変更する。 これらの変更には持続性がない。すなわち、アプリケーション内でシステムプロパティを変更することは、次回実行されるこのアプリケーションの Java インタープリタまたは開始するたびにシステムプロパティが再初期化される他のアプリケーションには影響しない。 システムプロパティの変更に持続性を持たせたければ、アプリケーションは、終了する前にファイルに値を書き込んで、スタートアップ時に再びそれらを読み込まなくてはならない。


注釈: System クラスの以前のバージョンでは、環境変数の値を検索する getenv() と呼ばれるメソッドをサポートした。 このメソッドは UNIX 固有であり、さらに用途が広いプロパティメカニズムによって時代遅れになっている。 Java プログラムはこれ以上 getenv() を使用するべきではない。

参照

java.util.Properties


Previous | Next | Trail Map | Writing Java Programs | システム資源の使用