ArrayListWith5Points

Ở 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
PHP:
package javaandroidvn;
 
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.util.ArrayList;import java.util.Scanner;import java.util.logging.Level;import java.util.logging.Logger;

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[] argsthrows IOException {
        
ArrayList<HocSinhlistHS = 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 0ni++) {
                
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ứ " ": ");
                
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.SEVEREnullex);
        }
      
        
//Đọ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 0ni++) {
                
= (HocSinhoIT.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 0listHS.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!
PHP:
package javaandroidvn;
 
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.util.ArrayList;import java.util.Scanner;import java.util.logging.Level;import java.util.logging.Logger;

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[] argsthrows IOException {
        
ArrayList<HocSinhlistHS = 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 0ni++) {
            
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ứ " ": ");
            
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.SEVEREnullex);
        }


        
//Đọc dữ liệu từ file, lấy các object ra rồi gán vào ListHS

        
ArrayList<HocSinhlistHS2 = 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 0listHS2.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");
        }


    }
}

[IMG]

Bài tập về nhà::D
Làm chương trình từ điển. Danh sách từ là danh sách các đối tượng gồm 2 thuộc tính từ và nghĩa
Số từ nhập vào từ màn hình. Nhập dữ liệu các từ qua màn hình console. Khi nhập dữ liệu xong, toàn bộ dữ liệu được lưu vào file theo kiểu object.
Sau đó chương trình hỏi từ cần tìm, nhập từ cần tìm. Chương trình đọc file vừa ghi, rồi tìm kiếm nghĩa của từ vừa nhập, in ra nghĩa của từ cần tra cứu!

0 blogger-facebook:

Post a Comment

 
Top