Java如何将对象存储在文件中?

此示例演示如何使用java.io.ObjectOutputStream和java.io.ObjectInputStream类来写入和读取序列化的对象。我们将创建一个Book实现java.io.Serializable接口。本Book类有接受所有的书详细信息的构造。

要将对象写入流,我们调用ObjectOutputStream类的writeObject()方法,并将序列化的对象传递给它。为了读回对象,我们调用ObjectInputStream类的readObject()方法。

package org.nhooo.example.io;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class ObjectStoreExample {

    public static void main(String[] args) {
        // 创建FileOutputStream和ObjectOutputStream的实例。
        try (FileOutputStream fos = new FileOutputStream("books.dat");
             ObjectOutputStream oos = new ObjectOutputStream(fos)) {

            //创建一个Book实例。然后将这本书对象存储在
            // 文件。
            Book book = new Book("0-07-222565-3", "Hacking Exposed J2EE & Java",
                "Art Taylor, Brian Buege, Randy Layman");

            // 通过使用ObjectOutputStream的writeObject()方法,我们可以
            // 使book对象持久保存在books.dat文件中。
            oos.writeObject(book);
        } catch (IOException e) {
            e.printStackTrace();
        }

        //我们已经保存了这本书。现在该回读并显示它了
        // 其详细信息。
        try (FileInputStream fis = new FileInputStream("books.dat");
             ObjectInputStream ois = new ObjectInputStream(fis)) {

            // 要读取Book对象,请使用ObjectInputStream.readObject()方法。
            // 此方法返回对象类型数据,因此我们需要将其投射回
            // 起源类,书籍类。
            Book book = (Book) ois.readObject();
            System.out.println(book.toString());

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

// 书籍对象将使用ObjectOutputStream类保存并被读取
//返回使用ObjectInputStream类。使对象可以写入
// 流,我们需要使该类实现Serializable接口。
class Book implements Serializable {
    private String isbn;
    private String title;
    private String author;

    public Book(String isbn, String title, String author) {
        this.isbn = isbn;
        this.title = title;
        this.author = author;
    }

    @Override
    public String toString() {
        return "Book{" +
            "isbn='" + isbn + '\'' +
            ", title='" + title + '\'' +
            ", author='" + author + '\'' +
            '}';
    }
}

上面的代码片段的结果是:

Book{isbn='0-07-222565-3', title='Hacking Exposed J2EE & Java', author='Art Taylor, Brian Buege, Randy Layman'}