- Mình sẽ viết 2 ví dụ cụ thể, với các mức độ khác nhau,từ đơn giản nhất. Nếu bạn thấy khó hiểu chỗ nào có thể bình luận phía dưới. Mọi người cùng trao đổi.
**Chú ý: Để đọc ghi theo Object trong Java thì tại class Object đó ta cần đặt giao tiếp java.io.Serializable (implements Serializable)
Ví dụ 1: Đọc ghi 1 đối tượng lên file theo từng object:
- Khai báo 1 class SinhVien gồm 2 thuộc tính họ tên, tuổi. Tạo 1 đối tượng cụ thể sinh viên a sau đó
gán thông tin cho sinh viên a rồi ghi đối tượng a này xuống file "E:\\sinhvien.dat"
- Mở file trên ra. Đọc file đó theo kiểu object để lấy đối tượng đó ra, (cần ép kiểu về kiểu dữ liệu của đối tượng), rồi gán nó vào đối tượng a1. In ra màn hình thông tin đối tượng a1. Code như sau:
PHP:
package javaandroidvn;
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;
class SinhVien implements Serializable {
public String hoTen;
public int tuoi;
}
public class JavaAndroidVn {
public static void main(String[] args) throws IOException {
SinhVien a = new SinhVien();
a.hoTen = "Vũ Văn Tường";
a.tuoi = 21;
try {
FileOutputStream f = new FileOutputStream("E:\\sinhvien.dat");
ObjectOutputStream oOT = new ObjectOutputStream(f); // Sử dụng để ghi file theo từng Object
oOT.writeObject(a); // Ghi Object là đối tượng a xuống file
oOT.close();
f.close();
} catch (IOException e) {
System.out.println("Có lỗi xảy ra!");
}
SinhVien a1 = new SinhVien(); //Tạo đối tượng a1 mới, để phía dưới gán bằng đối tượng ta lấy được ra từ file
try {
FileInputStream f = new FileInputStream("E:\\sinhvien.dat");
ObjectInputStream oIT = new ObjectInputStream(f); // Sử dụng để đọc file theo từng Object
a1 = (SinhVien) oIT.readObject(); //Đọc Object đầu tiên ép kiểu về kiểu SinhVien sau đó gán bằng đối tượng a1
oIT.close();
f.close();
} catch (IOException io) {
System.out.println("Có lỗi xảy ra!");
} catch (ClassNotFoundException ex) {
System.out.println("Không tìm thấy class");
}
System.out.println("Thông tin sinh vien a1 đọc ra là: \nTên: "+a1.hoTen+"\nTuổi: "+a1.tuoi);
}
}
(Qua ví dụ này, và kết hợp bài sau, mình sẽ giới thiệu cách đọc ghi 1 danh sách các đối tượng lên file, giúp việc quản lý danh sách các đối tượng dễ dàng hơn!)
PHP:
package javaandroidvn;
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;
class SinhVien implements Serializable {
private String hoTen;
private int tuoi;
public String getHoTen() {
return hoTen;
}
public void setHoTen(String hoTen) {
this.hoTen = hoTen;
}
public int getTuoi() {
return tuoi;
}
public void setTuoi(int tuoi) {
this.tuoi = tuoi;
}
}
public class JavaAndroidVn {
public static void main(String[] args) throws IOException {
SinhVien a = new SinhVien();
a.setHoTen("Vũ Văn T");
a.setTuoi(21);
SinhVien b = new SinhVien();
b.setHoTen("Nguyễn Văn A");
b.setTuoi(22);
try {
FileOutputStream f = new FileOutputStream("E:\\sinhvien.dat");
ObjectOutputStream oOT = new ObjectOutputStream(f); // Sử dụng để ghi file theo từng Object
oOT.writeObject(a); // Ghi Object là đối tượng a xuống file
oOT.writeObject(b);
oOT.close();
f.close();
} catch (IOException e) {
System.out.println("Có lỗi xảy ra!");
}
SinhVien a1 = new SinhVien(); //Tạo đối tượng a1 mới, để phía dưới gán bằng đối tượng ta lấy được ra từ file
SinhVien b1 = new SinhVien(); //Tạo đối tượng b1 mới, để phía dưới gán bằng đối tượng ta lấy được ra từ file
try {
FileInputStream f = new FileInputStream("E:\\sinhvien.dat");
ObjectInputStream oIT = new ObjectInputStream(f); // Sử dụng để đọc file theo từng Object
a1 = (SinhVien) oIT.readObject(); //Đọc Object đầu tiên ép kiểu về kiểu SinhVien sau đó gán bằng đối tượng a1
b1 = (SinhVien) oIT.readObject(); //Đọc Object tiếp theo, ép kiểu về kiểu SinhVien sau đó gán bằng đối tượng b1
oIT.close();
f.close();
} catch (IOException io) {
System.out.println("Có lỗi xảy ra!");
} catch (ClassNotFoundException ex) {
System.out.println("Không tìm thấy class");
}
System.out.println("Thông tin sinh vien a1 đọc ra là: \nTên: " + a1.getHoTen() + "\nTuổi: " + a1.getTuoi());
System.out.println("Thông tin sinh vien b1 đọc ra là: \nTên: " + b1.getHoTen() + "\nTuổi: " + b1.getTuoi());
}
}
Bài tập về nhà:
Class thẻ thư viện có các thuộc tính: mã thẻ, tên sinh viên, số sách mượn. Tạo ra 3 đối tượng thẻ thư viện, gán giá trị nhập vào từ bàn phím. Ghi lại thông tin 3 đối tượng này xuống file theo kiểu object rồi đọc file đó, đọc dữ liệu các đối tượng từ trong file vừa ghi, in ra màn hình!
thanks b, bài viết dễ hiểu lắm, cho mình hỏi là đọc đến hết file như thế nào vậy
ReplyDelete