Ghi đối tượng (Object) vào file trong Java

Bạn đã biết ghi dữ liệu vào file dưới dạng text, có thể mở file ra xem bởi các text editor như notepad, notepad++, sublime text,…Nhưng có điều bạn hay thao tác với dữ liệu đối tượng, muốn lưu trữ lại dữ liệu của các đối tượng để lần sau đọc và sử dụng mà không phải nhập lại dữ liệu cho chương trình.

Java hỗ trợ bạn làm điều đó. Object Java có thể ghi vào file để lưu trữ, tái sử dụng. Đây gọi là Serialization. Để ghi đối tượng (Object) vào file trong Java bạn phải implement interface Serializable và sử dụng ObjectOutputStream để ghi.

FileOutputStream fout = new FileOutputStream("C:\\data\\diemthi.bin");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(diemthi);

1. Object

Tạo class “DiemThi” implement interface Serializable. Đối tượng tạo từ lớp này sẽ được ghi vào file.

Nếu lỡ bạn quên implement Serializable từ class kia thì sao? Tức nhiên đối tượng của bạn sẽ không ghi được vào file.

package com.ngockhuong;

import java.io.Serializable;

public class DiemThi implements Serializable {

	private static final long serialVersionUID = 1L;

	private String hoTen;
	private float diemTrungBinh;

	public DiemThi() {
	}

	public DiemThi(String hoTen, float diemTrungBinh) {
		this.hoTen = hoTen;
		this.diemTrungBinh = diemTrungBinh;
	}

	public String getHoTen() {
		return hoTen;
	}

	public void setHoTen(String hoTen) {
		this.hoTen = hoTen;
	}

	public float getDiemTrungBinh() {
		return diemTrungBinh;
	}

	public void setDiemTrungBinh(float diemTrungBinh) {
		this.diemTrungBinh = diemTrungBinh;
	}
}

2. Ghi đối tương (Object) vào file

Thực hiện ghi đối tượng DiemThi có dữ liệu (“Lâm Ngọc Khương”, 9) vào file có tên “diemthi.bin” tại địa chỉ “C:\\data\\diemthi.bin

Mở file diemthi.bin bằng text editor hay một trình IDE cao cấp có xem được nội dung không? Bạn hãy thử xem, toàn những ký tự mà bạn không thể đọc được, khi mở bằng sublime text thì hiện ra toàn số, notepad++ thì có xem được vài chữ nhưng vẫn không hiểu được, notepad thì bỏ cuộc,…bạn thử xem sao nhá 🙂

package com.ngockhuong;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class WriteObject {
	public static void main(String[] args) {
		WriteObject obj = new WriteObject();

		DiemThi diemThi = new DiemThi();
		diemThi.setHoTen("Lâm Ngọc Khương");
		diemThi.setDiemTrungBinh(9);
		
		obj.serializeDiemThi(diemThi);
	}

	public void serializeDiemThi(DiemThi diemThi) {
		FileOutputStream fout = null;
		ObjectOutputStream oos = null;
		try {

			fout = new FileOutputStream("C:\\data\\diemthi.bin");
			oos = new ObjectOutputStream(fout);
			oos.writeObject(diemThi);

			System.out.println("Xong!");
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			if (fout != null) {
				try {
					fout.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			if (oos != null) {
				try {
					oos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	public void serializeDiemThiJDK7(DiemThi diemThi) {
		try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:\\data\\diemthi.bin"))) {
			oos.writeObject(diemThi);
			System.out.println("Xong!");
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}
[alert-success]

Tóm lại

Muốn ghi được đối tượng vào file, class định nghĩa cho đối tượng phải implement interface Serializable. Và, file được ghi dưới dạng đối tượng trong Java không thể mở bằng các editor. Muốn đọc được dữ liệu, bạn sẽ phải sử dụng cách đọc đối tượng (Object) đã lưu từ file trong Java 🙂

[/alert-success]

Tham khảo

  1. ObjectOutputStream JavaDoc
  2. Java Object Serialization

3.4 5 votes
Đánh giá bài viết
Nhận thông báo
Thông báo khi có
guest

0 Bình luận
cũ nhất
mới nhất vote nhiều nhất
Phản hồi nội tuyến
Xem tất cả các bình luận