30/09/2018, 20:09

Làm sao để đọc và ghi(ghi nhiều lần) arraylist vào file trong java?

Đây là code mình viết như không đọc đk dữ liệu nhập kể từ lần thứ 2 trở đi

Class Function

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ObjectIO;

import ListObjectIO.ObRead;
import ListObjectIO.ObWirte;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Tien Nguyen
 */
public class Function {

    public Function() {
        ArrayList<Studental = new ArrayList();
        boolean a = false;
        Student a1 = new Student(555, "nnnnnnnnnnnnnnnn", "mmmmmmmmmmmmmmmmm", 5, 10);
        Student a2 = new Student(555, "dddddddddddddd", "cccccccccccccccccccccccccccc", 5, 10);
        Student a3 = new Student(555, "wwwwwwwwwwwwwwwwwwwwwwwwwww", "aaaaaaaaaaaâ", 5, 10);
        al.add(a1);
        al.add(a2);
        al.add(a3);
        ObWrite(al, false);
    }

    public void Input() {
        ArrayList<Studental = new ArrayList();
        Scanner s = new Scanner(System.in);
        System.out.println("=========== Them moi sinh vien =============");
        System.out.print("Nhap ID: ");
        int id = s.nextInt();
        s = new Scanner(System.in);
        System.out.println("Nhap ten: ");
        String name = s.nextLine();
        System.out.println("Nhap Lop: ");
        String classs = s.nextLine();
        System.out.println("Nhap diem 1: ");
        int mark1 = s.nextInt();
        System.out.println("Nhap diem 1: ");
        int mark2 = s.nextInt();
        Student st = new Student(id, name, classs, mark1, mark2);
        al.add(st);

        ObWrite(al, true);
        //a = true;
    }

    public void ObWrite(ArrayList st, boolean append) {
        String path = "src\ObjectIO\Student.dat";
        File file = new File(path);

        OutputStream outputStream;
        try {
            ObjectOutputStream ois;
            if (append) {
                outputStream = new FileOutputStream(file, append);
                ois = new ObjectOutputStream(outputStream) {
                    @Override
                    protected void writeStreamHeader() throws IOException {

                    }
                };
            } else {
                outputStream = new FileOutputStream(file);
                ois = new ObjectOutputStream(outputStream);
            }
            ois.writeObject(st);
            ois.flush();
            ois.close();
            outputStream.flush();
            outputStream.close();
        } catch (IOException ex) {
            Logger.getLogger(Function.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public static ArrayList<StudentreadAppend() {
        String path = "src\ObjectIO\Student.dat";
        File f = new File(path);
        ArrayList<Studentres = new ArrayList<>();
        ArrayList<Studentres2 = new ArrayList<>();
        ObjectInputStream obin = null;
        try {
            FileInputStream in = new FileInputStream(f);
            obin = new ObjectInputStream(in);

            res = (ArrayList<Student>) obin.readObject();

            res2 = (ArrayList<Student>) obin.readObject();
            System.out.println("ab <-----------------------------------------------");
            for (int i = 0; i < res2.size(); i++) {
                System.out.println(i + " " + res2.get(i).getId() + "	" + res2.get(i).getName() + "	" + res2.get(i).getClasss() + "	" + res2.get(i).getMark1() + "	" + res2.get(i).getMark2());

            }
        } catch (Exception ex) {
        } finally {
            if (obin != null) {
                try {
                    obin.close();
                    System.out.println("---------------- Error -------------");
                } catch (IOException ex) {
                    Logger.getLogger(ObRead.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        return res;

    }

    public void ShowStudent(ArrayList<Studentst) {
        System.out.println("NO  StudentID	StudentName	Class   	Mark	Mark");
        for (int i = 0; i < st.size(); i++) {
            System.out.println(i + " " + st.get(i).getId() + "	" + st.get(i).getName() + "	" + st.get(i).getClasss() + "	" + st.get(i).getMark1() + "	" + st.get(i).getMark2());

        }
    }
}

Class Student

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ObjectIO;

import java.io.Serializable;

/**
 *
 * @author Tien Nguyen
 */
public class Student implements Serializable{
private int id;
private String name;
private String classs;
private int mark1;
private int mark2;

public Student(int id, String name, String classs, int mark1, int mark2) {
    this.id = id;
    this.name = name;
    this.classs = classs;
    this.mark1 = mark1;
    this.mark2 = mark2;
}

public Student() {
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getClasss() {
    return classs;
}

public void setClasss(String classs) {
    this.classs = classs;
}

public int getMark1() {
    return mark1;
}

public void setMark1(int mark1) {
    this.mark1 = mark1;
}

public int getMark2() {
    return mark2;
}

public void setMark2(int mark2) {
    this.mark2 = mark2;
}


}

Class main

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ObjectIO;

import java.util.ArrayList;
import java.util.Scanner;

/**
 *
 * @author Tien Nguyen
 */
public class Run {

public static void main(String[] args) {
    Function f = new Function();
    ArrayList<Studentsl = null;
    while (true) {
        System.out.println("1. Them moi sinh vien");
        System.out.println("2. Xem danh sach sinh vien");
        Scanner s = new Scanner(System.in);
        System.out.print("#chon: ");
        int choice = s.nextInt();

        switch (choice) {
            case 1:
                f.Input();
                break;
            case 2:
                sl = f.readAppend();
                f.ShowStudent(sl);
                break;
        }
    }
}
}
Nguyễn Anh Khoa viết 22:18 ngày 30/09/2018

@conan4582 Chuyên ngành này Hùng

Nguyễn Anh Khoa viết 22:13 ngày 30/09/2018

code của bạn chỗ có khung chỗ không có

Tiến Nguyễn viết 22:10 ngày 30/09/2018

chỗ có khung chỗ không có là sao ạ

Nguyễn Anh Khoa viết 22:11 ngày 30/09/2018

À bạn sửa lại rồi

Tiến Nguyễn viết 22:21 ngày 30/09/2018

Trong code có một số đoạn code test để tìm cách sửa lên hơi ngớ ngẩn tí,

Tiến Nguyễn viết 22:15 ngày 30/09/2018

Đã fix đk lỗi. Đây là code nhé!

Function class: ( các file khác vẫn vậy )

/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package ObjectIO;

import ListObjectIO.ObRead;
import ListObjectIO.ObWirte;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*

  • @author Tien Nguyen
    */
    public class Function {
public void Input() {
    Scanner s = new Scanner(System.in);
    System.out.println("=========== Them moi sinh vien =============");
    System.out.print("Nhap ID: ");
    int id = s.nextInt();
    s = new Scanner(System.in);
    System.out.println("Nhap ten: ");
    String name = s.nextLine();
    System.out.println("Nhap Lop: ");
    String classs = s.nextLine();
    System.out.println("Nhap diem 1: ");
    int mark1 = s.nextInt();
    System.out.println("Nhap diem 1: ");
    int mark2 = s.nextInt();
    Student st = new Student(id, name, classs, mark1, mark2);
    ObWrite(st, true);
}

// kiem tra file co object hay khong
public static boolean hasObject(File f) {
    // thu doc xem co object nao chua
    FileInputStream fi;
    boolean check = true;
    try {
        fi = new FileInputStream(f);
        ObjectInputStream inStream = new ObjectInputStream(fi);
        if (inStream.readObject() == null) {
            check = false;
        }
        inStream.close();
    } catch (FileNotFoundException e) {
        check = false;
    } catch (IOException e) {
        check = false;
    } catch (ClassNotFoundException e) {
        check = false;
        
    }
    return check;
}
public void ObWrite(Student st, boolean append) {
    String path = "src\\ObjectIO\\Student.dat";
    File file = new File(path);
    OutputStream outputStream;
    try {
        ObjectOutputStream ois;
        if (!hasObject(file)) {
            outputStream = new FileOutputStream(file);
            ois = new ObjectOutputStream(outputStream);
        } else {
            outputStream = new FileOutputStream(file, append);
            ois = new ObjectOutputStream(outputStream) {
                @Override
                protected void writeStreamHeader() throws IOException {
                    reset();
                }
            };
        }
        ois.writeObject(st);
        ois.flush();
        ois.close();
        outputStream.flush();
        outputStream.close();
    } catch (IOException ex) {
        Logger.getLogger(Function.class.getName()).log(Level.SEVERE, null, ex);
    }
}
public static ArrayList<Student> readAppend() {
    String path = "src\\ObjectIO\\Student.dat";
    File f = new File(path);
    ArrayList<Student> res = new ArrayList<>();
    ObjectInputStream obin = null;
    try {
        FileInputStream in = new FileInputStream(f);
        obin = new ObjectInputStream(in);
        Object obj = null;
        while ((obj = obin.readObject()) != null) {
            res.add((Student) obj);
        }
    } catch (Exception ex) {
    } finally {
        if (obin != null) {
            try {
                obin.close();
                // System.out.println("---------------- Error -------------");
            } catch (IOException ex) {
                Logger.getLogger(ObRead.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    return res;
}
public void ShowStudent(ArrayList<Student> st) {
    System.out.println("NO  StudentID\tStudentName\tClass   \tMark\tMark");
    for (int i = 0; i < st.size(); i++) {
        System.out.println(i + " " + st.get(i).getId() + "\t" + st.get(i).getName() + "\t" + st.get(i).getClasss() + "\t" + st.get(i).getMark1() + "\t" + st.get(i).getMark2());
    }
}

}

Quốc Hùng viết 22:12 ngày 30/09/2018

mình rất vui khi bạn sửa được lỗi của bạn nhưng sau này bạn có hỏi về một vấn đề gì đấy thì phải nêu rõ câu hỏi, phần lỗi, thông báo lỗi và cả vị trí lỗi nhé. Thân

Tiến Nguyễn viết 22:12 ngày 30/09/2018

Câu hỏi là tiêu đề rồi, còn phần lỗi thì đâu biết đâu, thông báo cũng trả có luôn
---- Biện minh ----

Bài liên quan
0