開発者ドキュメント

Javaオブジェクトを読み込んでファイルに書き込む方法

Javaオブジェクトhttps://en.wikipedia.org/wiki/Serialization[Serialization]は、Javaオブジェクトをシリアル化するための手段として、Javaライブラリスタックによって提供されるAPIです。シリアライゼーションは、オブジェクトを書き込み可能なバイトストリームに変換するプロセスです。バイトストリームに変換されると、これらのオブジェクトをファイルに書き込むことができます。これの逆のプロセスをデシリアライゼーションと呼びます。

Javaオブジェクトは、そのクラスまたはスーパークラスのいずれかが

java.io.Serializable`インターフェースまたはそのサブインターフェース

java.io.Externalizable`を実装する場合、直列化可能です。

1. Javaオブジェクト

Person.java

package com.techfou;

import java.io.Serializable;

public class Person implements Serializable {

    private static final long serialVersionUID = 1L;
    private String name;
    private int age;
    private String gender;

    Person() {
    };

    Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Name:" + name + "\nAge: " + age + "\nGender: " + gender;
    }
}

2. Javaでのオブジェクトの記述と読み込み

オブジェクトは

java.io.ObjectOutputStream`を使ってバイトストリームに変換できます。 `ObjectOutputStream`を使ってオブジェクトをファイルに書き込むことを可能にするためには、そのクラスが以下のクラス定義に示すような

Serializable`インタフェースを実装することが必須です。

Javaでオブジェクトを読むことは、 `ObjectOutputStreamObjectInputStream`を使ってオブジェクトを書くことと似ています。以下の例は、オブジェクトの書き込みとJavaでのオブジェクトの読み取りの完全なサイクルを示しています。

オブジェクトを読み込むと、 `ObjectInputStream`はすべての属性を、読み込みオブジェクトをキャストしようとしているクラスに直接マップしようとします。

それぞれのオブジェクトを正確にマップできない場合は、 `ClassNotFound`例外がスローされます。

ここで例を使って書き込みと読み取りのプロセスを理解しましょう。

上に示した `Person`クラスをオブジェクトとして使用しています。

WriterReader.java

package com.techfou;

package com.mkyong;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class WriterReader {

    public static void main(String[]args) {

        Person p1 = new Person("John", 30, "Male");
        Person p2 = new Person("Rachel", 25, "Female");

        try {
            FileOutputStream f = new FileOutputStream(new File("myObjects.txt"));
            ObjectOutputStream o = new ObjectOutputStream(f);

           //Write objects to file
            o.writeObject(p1);
            o.writeObject(p2);

            o.close();
            f.close();

            FileInputStream fi = new FileInputStream(new File("myObjects.txt"));
            ObjectInputStream oi = new ObjectInputStream(fi);

           //Read objects
            Person pr1 = (Person) oi.readObject();
            Person pr2 = (Person) oi.readObject();

            System.out.println(pr1.toString());
            System.out.println(pr2.toString());

            oi.close();
            fi.close();

        } catch (FileNotFoundException e) {
            System.out.println("File not found");
        } catch (IOException e) {
            System.out.println("Error initializing stream");
        } catch (ClassNotFoundException e) {
           //TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

上記のコードを実行すると、以下の出力が得られます。

Name:John
Age: 30
Gender: Male
Name:Rachel
Age: 25
Gender: Female

参考文献

Java Docs]


java.io


読み込みオブジェクト

リンク://タグ/シリアライゼーション/[シリアル化]リンク://タグ/書き込みオブジェクト/[書き込み
オブジェクト]

モバイルバージョンを終了