Bits of Java (トップ)

目次  次へ

JavaBenas を XML ファイルに保存

JavaBeans を XML ファイルに保存するプログラム例です。 JavaBeans として作成されている SampleBean クラスのインスタンスを 生成してプロパティを変更し sample.xml という XML ファイルに保存しています。 SampleBean は Serializable インターフェイスを実装していますが XMLEncoder を使って XML に変換するにあたっては Serializable インターフェイスを実装している必要はありません。

XMLEncoder のコンストラクタは引数に OutputStream オブジェクトを指定します。 この OutputStream オブジェクトが UTF-8 で作成された XML の byte 列を書き出します。

XMLEncoder オブジェクトを生成したら XML への変換は writeObject メソッドで行います。 writeObject メソッドの引数には XML 形式に変換するオブジェクトを指定します。

XMLEncoder#flush メソッドが呼び出された時にコンストラクタで 設定した OutputStream オブジェクトへの書き込みが行われます。 XMLEncoder#close メソッドは XMLEncoder#flush メソッドを呼び出し、 XML を完成(ルートタグを閉じる)させてから OutputStream オブジェクトの close メソッドを呼び出します。

/******************** EncodeTest.java ********************/
import java.beans.XMLEncoder;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;

public class EncodeTest {
    public static void main(String[] args) throws FileNotFoundException {
        SampleBean bean = new SampleBean();
        bean.setValue(100);
        Foo foo = new Foo();
        foo.setText("AAA");
        bean.setFoo(foo);

        XMLEncoder encoder = new XMLEncoder(
                                 new BufferedOutputStream(
                                     new FileOutputStream("sample.xml")));
        encoder.writeObject(bean);
        encoder.close();
    }
}

/******************** SampleBean.java ********************/
public class SampleBean implements java.io.Serializable {
    private int value;
    private Foo foo;

    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }
    public Foo getFoo() {
        return foo;
    }
    public void setFoo(Foo foo) {
        this.foo = foo;
    }
}

/******************** Foo.java ********************/
public class Foo implements java.io.Serializable {
    private String text;

    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }
}

/******************** sample.xml ********************/
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.5.0_01" class="java.beans.XMLDecoder">
 <object class="SampleBean">
  <void property="foo">
   <object class="Foo">
    <void property="text">
     <string>AAA</string>
    </void>
   </object>
  </void>
  <void property="value">
   <int>100</int>
  </void>
 </object>
</java>