简体   繁体   English

如何保存和加载对象数组列表?

[英]How to save and load an array list of objects?

I have a class Employees that has methods add, delete, display and search employees in an array list.我有一个员工类,它具有在数组列表中添加、删除、显示和搜索员工的方法。 Now I'm trying to create a file handler to save and read this data but for some reason it isn't working and it isn't creating a file or reading it.现在我正在尝试创建一个文件处理程序来保存和读取这些数据,但由于某种原因它不起作用,它没有创建文件或读取它。 Can anyone find a problem with my code please?任何人都可以找到我的代码的问题吗?


I tested your code but couldn't find any problem.我测试了你的代码,但没有发现任何问题。
why don't you try to catch Throwable and check it by debugging?为什么不尝试捕获 Throwable 并通过调试来检查它?

try { /* code */ }
catch (Throwable t) { t.printStackTrace(); }

This solution tests EmployeeFileHandler and shows the error if eg the directory is not writable.此解决方案测试 EmployeeFileHandler 并在例如目录不可写时显示错误。 Run with javac EmployeeFileHandler.java; java -ea EmployeeFileHandler使用javac EmployeeFileHandler.java; java -ea EmployeeFileHandler运行javac EmployeeFileHandler.java; java -ea EmployeeFileHandler javac EmployeeFileHandler.java; java -ea EmployeeFileHandler to have it crash if assertion fails. javac EmployeeFileHandler.java; java -ea EmployeeFileHandler如果断言失败,它会崩溃。 Ensure the Person class is also Serializable.确保 Person 类也是可序列化的。

import java.util.*;
import java.io.*;

public class EmployeeFileHandler implements Serializable {
    public static void main(String[] args) {
        ArrayList<Employees> employees = new ArrayList<Employees>();
        for (int i = 0; i < 1000; i++) {
            employees.add(new Employees("Name" + i, "Surname" + i, "" + i, 12345678));
        }        
        writeDate(employees);

        ArrayList<Employees> employees2 = new ArrayList<Employees>();
        readData(employees2);

        assert employees.size() == employees2.size();
        for (int i = 0; i < 1000; i++) {
            Employees e = employees2.get(i);
            assert e.Name.equals("Name" + i);
            assert e.Surname.equals("Surname" + i);
            assert e.ID.equals("" + i);
            assert e.MobNo == 12345678;
        }        
    }

    public static void readData(ArrayList<Employees> listIn) {

        boolean endOfFile = false;
        Employees temp;

        try {

            FileInputStream employeesFile = new FileInputStream("employee.obf");
            ObjectInputStream employeesStream = new ObjectInputStream(employeesFile);
            temp = (Employees) employeesStream.readObject();

            while (endOfFile != true) {
                try {
                    listIn.add(temp);
                    temp = (Employees) employeesStream.readObject();
                } catch (EOFException e) {
                    endOfFile = true;
                }
            }
            employeesStream.close();
        }

        catch (FileNotFoundException e) {
            System.out.println("Employee file was not found");
        } catch (IOException e) {
            System.out.println("Employee file could not be read");
        } catch (ClassNotFoundException e) {
            System.out.println("Employee class was not found");
        }
    }

    public static void writeDate(ArrayList<Employees> employee) {

        try {
            FileOutputStream EmployeesFile = new FileOutputStream("employee.obf");
            ObjectOutputStream EmployeesStream = new ObjectOutputStream(EmployeesFile);

            for (Employees employees : employee) {
                EmployeesStream.writeObject(employees);
            }
            EmployeesStream.close();
        } catch (IOException e) {
            // System.out.println("Error occurred while saving");
            e.printStackTrace();
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM