Bài 16: ArrayList trong Java (2)

Ở bài viết này, mình sẽ chia sẽ về cách lưu lại dữ liệu khi trong chương trình sử dụng ArrayList.
Thực ra, kết hợp với bài trước, bài đọc ghi Object, sẽ có nhiều bạn làm được điều này ngay. Nhưng mình sẽ viết để cho một số bạn cảm thấy khó khăn tham khảo luôn. Mình sẽ chú thích trong code!
Về cách lưu lên file ở chương trình có dùng ArrayList, mình dùng 2 cách như sau

Cách 1: Lưu trữ các đối tượng trong một đối tượng ArrayList xuống file!
Chương trình dưới đây sẽ lưu toàn bộ các đối tượng học sinh xuống file, để thao tác, ta nạp các đối tượng này và 1 đối tượng ArrayList

class HocSinh implements Serializable {
 
    private String ten;
    private int tuoi;
 
    public String getTen() {
        return ten;
    }
 
    public void setTen(String ten) {
        this.ten = ten;
    }
 
    public int getTuoi() {
        return tuoi;
    }
 
    public void setTuoi(int tuoi) {
        this.tuoi = tuoi;
    }
}
 
public class JavaAndroidVn {
 
    public static void main(String[] args) throws IOException {
        ArrayList<HocSinh> listHS = new ArrayList(); // Khai báo 1 đối tượng ArrayList, các phần tử tạo ra từ lớp HocSinh
 
        Scanner input = new Scanner(System.in);
        System.out.println("Nhập số học sinh: ");
        int n = input.nextInt();
 
        //Lấy dữ liệu và ghi vào file
        try {
            FileOutputStream f = new FileOutputStream("E:\\hocsinh.dat");
            ObjectOutputStream oOT = new ObjectOutputStream(f); // Sử dụng để ghi file theo từng Object
            for (int i = 0; i < n; i++) {
                HocSinh x = new HocSinh(); //Tạo đối tượng x để lưu tạm thời dữ liệu
                System.out.println("Học sinh thứ " + i + ": ");
                input.nextLine(); //Dòng này để tránh bị trượt dòng!
 
                System.out.print("Tên: ");
                String tenX = input.nextLine();
 
                System.out.print("Tuổi: ");
                int tuoiX = input.nextInt();
 
                x.setTen(tenX);
                x.setTuoi(tuoiX);
 
                oOT.writeObject(x); // Ghi  Object là đối tượng x xuống file
 
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(JavaAndroidVn.class.getName()).log(Level.SEVERE, null, ex);
        }
      
        //Đọc dữ liệu từ file, lấy các object ra rồi gán vào ListHS
        try {
            FileInputStream f2 = new FileInputStream("E:\\hocsinh.dat");
            ObjectInputStream oIT = new ObjectInputStream(f2); // Sử dụng để đọc file theo từng Object
            HocSinh x = new HocSinh(); //Tạo đối tượng x để lưu tạm thời dữ liệu
            for (int i = 0; i < n; i++) {
                x = (HocSinh) oIT.readObject(); //Đọc Object đầu tiên ép kiểu về kiểu SinhVien sau đó gán bằng đối tượng a1
                listHS.add(x);
            }
            oIT.close();
            f2.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");
        }
 
        //In thông tin ra ngoài!
        System.out.println("Thông tin danh sách vừa nhập vào là: ");
        for (int i = 0; i < listHS.size(); i++) {
            System.out.print("Học sinh thứ " + i);
            System.out.print(" - Tên " + listHS.get(i).getTen() + " Tuổi: " + listHS.get(i).getTuoi() + "\n");
        }
 
 
    }
}

 

Cách 2: Lưu đối tượng ArrayList xuống File
Vì bản thân listHS là 1 đối tượng, nên ngắn gọn ta chỉ cần lưu trữ đối tượng listHS là được!

class HocSinh implements Serializable {
 
    private String ten;
    private int tuoi;
 
    public String getTen() {
        return ten;
    }
 
    public void setTen(String ten) {
        this.ten = ten;
    }
 
    public int getTuoi() {
        return tuoi;
    }
 
    public void setTuoi(int tuoi) {
        this.tuoi = tuoi;
    }
}
 
public class JavaAndroidVn {
 
    public static void main(String[] args) throws IOException {
        ArrayList<HocSinh> listHS = new ArrayList(); // Khai báo 1 đối tượng ArrayList, các phần tử tạo ra từ lớp HocSinh
 
        Scanner input = new Scanner(System.in);
        System.out.println("Nhập số học sinh: ");
        int n = input.nextInt();
 
        //Lấy dữ liệu và ghi vào file
 
        for (int i = 0; i < n; i++) {
            HocSinh x = new HocSinh(); //Tạo đối tượng x để lưu tạm thời dữ liệu
            System.out.println("Học sinh thứ " + i + ": ");
            input.nextLine(); //Dòng này để tránh bị trượt dòng!
 
            System.out.print("Tên: ");
            String tenX = input.nextLine();
 
            System.out.print("Tuổi: ");
            int tuoiX = input.nextInt();
 
            x.setTen(tenX);
            x.setTuoi(tuoiX);
 
            listHS.add(x);
 
        }
 
 
        try {
            FileOutputStream f = new FileOutputStream("E:\\hocsinh.dat");
            ObjectOutputStream oOT = new ObjectOutputStream(f); // Sử dụng để ghi file theo từng Object
            oOT.writeObject(listHS); // Ghi  Object là đối tượng x xuống file
        } catch (FileNotFoundException ex) {
            Logger.getLogger(JavaAndroidVn.class.getName()).log(Level.SEVERE, null, ex);
        }
 
 
        //Đọc dữ liệu từ file, lấy các object ra rồi gán vào ListHS
 
        ArrayList<HocSinh> listHS2 = new ArrayList(); // Khai báo 1 đối tượng ArrayList thứ 2, các phần tử tạo ra từ lớp HocSinh
        //Dùng để lưu dữ liệu riêng khi ta đọc file!                  
        try {
            FileInputStream f2 = new FileInputStream("E:\\hocsinh.dat");
            ObjectInputStream oIT = new ObjectInputStream(f2); // Sử dụng để đọc file theo từng Object
            listHS2 = (ArrayList<HocSinh>) oIT.readObject(); //Ép kiểu đối tượng lấy từ file ra về dạng ArrayList<HocSinh>
            oIT.close();
            f2.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");
        }
 
        //In thông tin ra ngoài! Thông tin lấy từ đối tượng ListHS2 vừa đọc từ file
        System.out.println("Thông tin danh sách vừa nhập vào là: ");
        for (int i = 0; i < listHS2.size(); i++) {
            System.out.print("Học sinh thứ " + i);
            System.out.print(" - Tên " + listHS2.get(i).getTen() + " Tuổi: " + listHS2.get(i).getTuoi() + "\n");
        }
 
 
    }
}

 

 

Nguyễn Linh

Chia sẻ để cùng tiến bộ...