プログラム内でデータを定数的に使いたいシーンはよくあると思います。
たとえばデータベースの接続情報、ログファイルの出力先フォルダやファイル名、ファイルやデータベースの状態を見に行く時間の設定、などなど・・・。
このような時、Windowsアプリケーションでは、設定ファイル(iniファイル)やレジストリに保存していました。
Windowsでは iniファイルやレジストリへの読み書きをサポートした関数群があるので、ほかの形式の設定ファイルよりもプログラミングの負担が小さいのです。
一方、必ずしもWindows上で動かされるとは限らないJavaの場合、よく設定ファイルの形式で使われるのが、XMLファイルと呼ばれるものです。
Javaの場合、レジストリはもとより、iniファイルに読み書きするよりは、XMLファイルに読み書きしたほうが、プログラミングの負担が小さくなるのです。
XMLファイルは HTMLファイルと同じように、<xxx>...</xxx>のようなタグで項目名、データを管理します。
|
|
XMLファイルへの読み書きを容易にしているのが XMLDecoderクラス、およびXMLEncoderクラスです。
XMLファイルからJavaのデータクラスに読み出すのが XMLDecoderクラス、XMLファイルの形式に変換して出力するのが XMLEncoderクラスの役割です。
ためしに、XMLファイル名とオブジェクトを渡すと自動的にXMLファイルに書き出したり、逆に呼び出しただけでXMLファイルからデータクラスに読み出すためだけのクラスを作ってみました。
|
なお、今回のサンプルで使うデータクラスは下のようなものです。
データ型に関しては、実際にはもっと適したものがあるものもありますが、今回はなるべく多くのデータ型を使うという方針でクラスを作成したので、そのあたりはご容赦ください。
|
たとえば1人分の情報だけを管理したらすむような場合、ただ単純にデータクラスのオブジェクトを生成して、そのインスタンスを使ってファイルを読み書きすれば事足ります。
|
上のようなプログラムを作成して実行すると、下のようなXMLファイルが作成されます。
|
このファイルを読み込むときは、データクラスのインスタンスを生成して、XMLファイル読み込みメソッドの戻り値をそこにすると、項目名に従ってデータが格納されていきます。
|
|
では、複数の人の分だけ情報を管理する必要がある場合は、どのようにしたらいいのでしょう?
答えは簡単。ただ単純にデータクラスのオブジェクトを配列で生成すればOKです。
配列のままXMLファイル出力メソッドに設定すれば、XMLファイルにもそのように出力されます。
|
|
読み込むときも、格納先クラスを配列にして、戻り値をそのクラス配列のインスタンスに設定すれば、項目名も判定してしかるべき箇所に格納してくれます。
|
|