■ 使用上の注意
全て重要* Javaオブジェクトには、java.io.Serializableインターフェイスを実装する * デフォルトコンストラクタが必要 * getter/setterを「get変数名」「set変数名」のように実装する * 変数の型がboolean型の場合は、「get変数名」の代わりに「is変数名」とすることもできる ※ Boolean型の場合は、「is変数名」にできない(ここで若干はまった) * 変数の型がboolean型で値が false の場合、XMLファイルに出力されない (Javaオブジェクトにしたらちゃんと値はfalseになっているから実用上問題ないと思うが)
■ サンプル
Person.java
* 対象となるオブジェクトimport java.io.Serializable; public class Person implements Serializable { private static final long serialVersionUID = -6612003848170755511L; private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } }
Main.java
import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class Main { /** * @param args */ public static void main(String[] args) { Person[] people = new Person[2]; people[0] = new Person("Mike", 23); people[1] = new Person("Tom", 31); // オブジェクトの書き出し XMLEncoder xMLEncoder = null; try { xMLEncoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("PersonObjects.xml"))); xMLEncoder.writeObject(people); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (xMLEncoder != null) { xMLEncoder.close(); } } // オブジェクトの呼び出し Person[] peopleFromXml; XMLDecoder xMLDecoder = null; try { xMLDecoder = new XMLDecoder(new BufferedInputStream(new FileInputStream("PersonObjects.xml"))); peopleFromXml = (Person[]) xMLDecoder.readObject(); int index = 0; for (Person person : peopleFromXml) { index++; System.out.println("[" + String.valueOf(index) + "] Name = " + person.getName() + " Aget = " + String.valueOf(person.getAge())); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (xMLDecoder != null) { xMLDecoder.close(); } } } }
出力
PersonObjects.xml<?xml version="1.0" encoding="UTF-8"?> <java version="1.8.0" class="java.beans.XMLDecoder"> <array class="com.sample.xml.Person" length="2"> <void index="0"> <object class="com.sample.xml.Person"> <void property="age"> <int>23</int> </void> <void property="name"> <string>Mike</string> </void> </object> </void> <void index="1"> <object class="com.sample.xml.Person"> <void property="age"> <int>31</int> </void> <void property="name"> <string>Tom</string> </void> </object> </void> </array> </java>コンソール画面
[1] Name = Mike Aget = 23 [2] Name = Tom Aget = 31
参考文献
http://www.f13g.com/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0/Java/XML%A4%F2%BB%C8%A4%A6/http://www.creative-forest.com/java/java_tips/io/xmlencoder/xmlencoder.html