|
XML に対応した Properties |
||||
|
||||
プロパティはアプリケーションの設定などによく使われていると思います。説明するより実際のファイルを見てみましょう。下のファイルは logging.properties ファイルです。見やすさのためにコメントを省略してあります。
1 行は キー = 値 で構成されています。 このようなプロパティを扱うクラスが java.util.Properties クラスです。このクラス自体は太古の JDK 1.0 のころからあるので皆さんご存知だと思います。 しかし、最近の傾向からすると何でもかんでも XML、設定ファイルも XML になってきています。たとえば、logging API の対抗馬 Log4J の設定ファイルは XML になっています。 今までの Properties クラスでは XML は扱うことができなかったのですが、Tiger になってやっと XML の設定ファイルの読み書きができるようになったのです。
|
|
||||||||||
なにはともあれやってみましょう。 まずはプロパティの保存から。
ここでは単純なプロパティを XML のファイルにセーブしています。XML にセーブするには Properties#storeToXML メソッドを使用します。
PropertiesSaveTest クラスを実行すると、system.properties ファイルが生成されるはずです。下のファイルは Windows XP で実行した場合のファイルです。
あっけなく XML でセーブされました。この XML を見てみるとプロパティは <entry> タグによって表されていることが分かります。キーは <entry> タグの key 属性、値が要素になっているようです。 このファイルの DTD は Properties クラスの JavaDoc に記載されています。 それでは次はロードです。
XML のプロパティファイルを読み込むには Properties#loadFromXML メソッドを使用します。
これを実行すると
ちゃんと読み込めたようです。順序は保証されていないので、これはこれで OK です。
|
|
||||||||
今までプロパティファイルを扱うときに一番問題だったというか面倒くさかったのは日本語の扱いです。 とうのはいままでプロパティファイルに記述できるのは文字コードは唯一 Unicode だけだったからです。日本語を入れたかったらシフト JIS や EUC で記述してから native2ascii コマンドで Unicode に変換しなければなりませんでした。 これは結構面倒です。 しかし、XML を扱えるということで光明が見えてきました。XML であれば文字コードをファイルの中で指定できるからです。 そこで、先ほどのプロパティファイルを次のように変更して PropertiesLoadTest クラスで読みこんでみました。
ファイル名は temp2.properties にしてあります。
ただしく読み込めました。 セーブはどうでしょうか。
文字コードを指定するには storeToXML メソッドの第 2 引数に文字コードを記述するようにします。
これを実行すると、次のようなファイルが生成されました。
encodig が Shift_JIS になり、文字コードも Shift_JIS になっていました。 これで日本語のプロパティを扱うのも容易ですね。
|
|
||||
今まで日本語が扱いにくかったプロパティですが、XML をサポートすることによりずいぶん楽に日本語が扱えるようになりました。 しかし、まだ問題は残っています。ResourceBundle クラスや logging API も Properties クラスを使用するのですが、これらの API はまだ XML に対応した実装が行われていないようです。特に ResourceBundle クラスが問題ですね。 Tiger の正式版までにちゃんと XML に対応してくれることを望んでいます。 また、今の XML のプロパティファイルは単にテキストのプロパティファイルを XML にしただけなので、あまり XML の効果がでていません。 たとえば、文字列だけでなく、オブジェクトも入れられるようになればもっといいのにと思いませんか。たとえば次のようにリストを入れるとか。
JAXB を使えるようにすればこういうこともできると思うのですが、今のままだといささか中途半端な仕様になってしまっていると思います。 そう思うと、JAXB をなぜコアに入れなかったかという疑問も残ります。JAXM や JAX-RPC は入れなくてもいいとは思いますが、JAXB はぜひ取り込んでほしかったと思います。
今回使用したサンプルはここからダウンロードできます。
(Apr. 2004) |
|