2013年6月19日水曜日

Androidアプリでデータをファイルで保存したい

Androidアプリでデータをファイルに保存したいことがあります。
ものによってはデータベースを使う方がいい場合もありますが、単体で出力したい場合に便利なのがシリアライズ。 データを1つのSerializableなクラスインスタンスにまとめておけばObjectOutputStream.writeObjectで簡単にファイルにすることが出来ます。
シリアライズのすごいところはそのクラスのフィールドがSerializableなクラスで構成されている場合には、出力コードを何にも書かなくていいんです。
たとえSerializableではないクラスがあったとしても、そこだけ自分で出力するかSerializableクラスに置き換えるだけでいいんです。

//データクラス
class S implements Serializable {
    private static final long serialVersionUID = 1L;
    public int id;
    public String name;
    public boolean visible;
    public S(int id) {
        this.id = id;
    }
}
//出力
S data = new S(1);
FileOutputStream fos = context.openFileOutput(filepath, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(data);
oos.close();
//読込
FileInputStream fis = new FileInputStream(filepath);
ObjectInputStream ois = new ObjectInputStream(fis);
S data = (S)ois.readObject();
ois.close();
ファイルを読み込むときもObjectInputStream.readObjectで開いてキャストするだけで復元できます。 ただし、シリアライズではこんな落とし穴こんな注意点もありますので、お気をつけて…

0 件のコメント:

コメントを投稿