モジュール java.prefs
パッケージ java.util.prefs

クラスPreferences

java.lang.Object
java.util.prefs.Preferences
直系の既知のサブクラス:
AbstractPreferences

public abstract class Preferences extends Object
設定データの階層的な集合の中の1つのノードです。 このクラスを使用して、アプリケーションからユーザーおよびシステムの設定データと構成データを格納および取得できます。 このデータは、実装ごとに異なるバッキング・ストアに永続的に保存されます。 たとえば、フラット・ファイル、OS固有のレジストリ、ディレクトリ・サーバー、SQLデータベースなどのバッキング・ストアに格納されます。 このクラスを使用するときに、バッキング・ストアの詳細を把握している必要はありません。

設定ノードは2つの個別のツリーで構成されます。一方はユーザー設定用、もう一方はシステム設定用です。 それぞれのユーザーは個々のユーザー設定ツリーを持ち、そのシステムのすべてのユーザーはシステム設計ツリーを持ちます。 ユーザー設定ツリーとシステム設定ツリーの定義は、実装ごとに異なります。 ユーザー設定ツリーには、フォント選択、カラー選択、特定のアプリケーションに設定したウィンドウ位置やサイズなどが格納されます。 システム設定ツリーには、アプリケーションのインストール構成データなどが格納されます。

設定ツリー内のノードには、階層ファイル・システムのディレクトリと同じ方法で名前が付けられます。 設定ツリーの各ノードには、ノード名 (一意である必要はない)、一意の絶対パス名、および各上位ノード(そのノード自体を含む)を起点とした相対パス名が割り当てられます。

ルート・ノードのノード名は、空の文字列("")です。 ほかのノードの名前は、作成時に任意に指定できます。 ノード名には任意の文字を使用できますが、空の文字列は指定できず、スラッシュ文字('/')は使用できません。

ルート・ノードの絶対パス名は"/"です。 ルート・ノードの子には、"/" + <node name>の絶対パス名があります。 他のすべてのノードの絶対パス名は、<親の絶対パス名> + "/" + <node name>です。 絶対パス名は、常にスラッシュ文字から始まります。

ノードnの相対パス名は、上位ノードaを起点とした場合、nの絶対パス名を作成するときにaの絶対パス名に追加される文字列になります。先頭にスラッシュ文字がある場合は削除します。 次の点に注意してください。

  • 相対パス名はスラッシュ文字で始まらない。
  • そのノード自体を起点とした相対パス名は空の文字列である。
  • 親を起点とした各ノードの相対パス名は、そのノード名になる。ただし、ルート・ノードには親が存在しないため、ルート・ノードは除く。
  • ルートを起点とした各ノードの相対パス名は、その絶対パス名から先頭のスラッシュ文字を削除したものになる。

次の点にも注意してください。

  • パス名には連続する複数のスラッシュ文字を含めることはできない。
  • ルートの絶対パス名を除き、パス名はスラッシュ文字で終わらない。
  • 上記の2つのルールに準拠している文字列はすべて有効なパス名である。

設定データを変更するメソッドはすべて、非同期に実行できます。つまり、実行後はただちに復帰し、変更は実装に依存した遅延が経過してから永続バッキング・ストアに送られます。 flushメソッドを使用すると、バッキング・ストアに対する更新を同期的に強制できます。 Java Virtual Machineを正常に終了しても、保留中の更新は失われません -- 保留中の更新が永続的になるようにするために、終了時に明示的なflush呼び出しは必要ありません。

Preferencesオブジェクトからプリファレンスを読み取るすべてのメソッドでは、起動側がデフォルト値を指定する必要があります。 読み込む前に値が設定されていなかった場合またはバッキング・ストアが利用できない場合は、そのデフォルト値が返されます。 これは、バッキング・ストアが利用できなくなった場合でも、アプリケーションが動作できるようにするためです(ただし、機能がわずかに低下する)。 flushなどのいくつかのメソッドには、バッキング・ストアが使用できない場合に動作できないセマンティクスがあります。 通常のアプリケーションでは、これらのメソッドを呼び出す必要がありません。それらは、BackingStoreExceptionをスローするように宣言していることで識別できます。

このクラスのメソッドは、1つのJVMの複数のスレッドから並行して呼び出すことができます。このとき、外部的に同期化する必要はありません。実行結果は、逐次実行した場合と等価です。 このクラスが複数のJVMによって同時に使用され、設定データが同じバッキング・ストアに格納された場合、データ・ストアは破壊しませんが、設定データの一貫性は保証されません。

このクラスには、エクスポート/インポート機能があり、設定をXMLドキュメントに「エクスポート」したり、設定が記述されたXMLドキュメントをシステムに「インポート」することができます。 この機能は、設定ツリーのすべてまたは一部をバックアップし、そのバックアップを復元するときに使用します。

このXMLドキュメントでは、次のDOCTYPEが宣言されます。


 <!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd">
 
設定をエクスポート/インポートするときに、システムURI (http://java.sun.com/dtd/preferences.dtd)にはアクセスしません。システムURIは、DTDを一意に識別する文字列として使用されます。その内容は次のとおりです。

    <?xml version="1.0" encoding="UTF-8"?>

    <!-- DTD for a Preferences tree. -->

    <!-- The preferences element is at the root of an XML document
         representing a Preferences tree. -->
    <!ELEMENT preferences (root)>

    <!-- The preferences element contains an optional version attribute,
          which specifies version of DTD. -->
    <!ATTLIST preferences EXTERNAL_XML_VERSION CDATA "0.0" >

    <!-- The root element has a map representing the root's preferences
         (if any), and one node for each child of the root (if any). -->
    <!ELEMENT root (map, node*) >

    <!-- Additionally, the root contains a type attribute, which
         specifies whether it's the system or user root. -->
    <!ATTLIST root
              type (system|user) #REQUIRED >

    <!-- Each node has a map representing its preferences (if any),
         and one node for each child (if any). -->
    <!ELEMENT node (map, node*) >

    <!-- Additionally, each node has a name attribute -->
    <!ATTLIST node
              name CDATA #REQUIRED >

    <!-- A map represents the preferences stored at a node (if any). -->
    <!ELEMENT map (entry*) >

    <!-- An entry represents a single preference, which is simply
          a key-value pair. -->
    <!ELEMENT entry EMPTY >
    <!ATTLIST entry
              key   CDATA #REQUIRED
              value CDATA #REQUIRED >
 
すべてのPreferences実装には、PreferencesFactory実装が関連付けられている必要があります。 すべてのJava(TM) SE実装は、ルート・プリファレンス・ノードの生成に使用されるPreferencesFactory実装を指定するいくつかの方法を提供する必要があります。 これによって、管理者はデフォルトのpreferences実装を代替実装に置き換えることができます。

実装上のノート:
PreferencesFactory実装は、次のように配置されています:
  1. システム・プロパティjava.util.prefs.PreferencesFactoryが定義されている場合は、PreferencesFactoryインタフェースを実装するクラスの完全修飾名とみなされます。 その後、クラスがロードされ、インスタンスが作成されます。

  2. system class loaderで表示されるjarファイルにPreferencesFactory実装クラス・ファイルがインストールされており、そのjarファイルにリソース・ディレクトリMETA-INF/services内のjava.util.prefs.PreferencesFactoryという名前のprovider-configurationファイルが含まれている場合は、そのファイルに指定された最初のクラス名が取得されます。 このようなjarファイルが2つ以上指定された場合は、最初に検出されたファイルが使用されます。 その後、クラスがロードされ、インスタンスが作成されます。

  3. 最後に、前述のシステム・プロパティと拡張jarファイルのいずれも指定されていない場合、基礎となるプラットフォームのシステム全体のデフォルトのPreferencesFactory実装がロードされ、インスタンス化されます。

導入されたバージョン:
1.4