Как сохранить и загрузить массив объектов списка? - PullRequest
0 голосов
/ 19 января 2019

У меня есть класс Employees, у которого есть методы добавления, удаления, отображения и поиска сотрудников в списке массивов.Сейчас я пытаюсь создать обработчик файлов для сохранения и чтения этих данных, но по какой-то причине он не работает и не создает файл или не читает его.Может кто-нибудь найти проблему с моим кодом, пожалуйста?

Это класс Employees

//This creates an array of employees
static ArrayList<Employees> employee = new ArrayList<Employees>();

//This method returns a employee's name
public String getName(){
    return Name;
}

//This method returns a employee's surname
public String getSurname(){
    return Surname;
}

//This method returns a employee's ID number
public String getID(){
    return ID;
}

//This method returns a employee's mobile number
public int getMobNo(){
    return MobNo;
}

Это обработчик файла Employee, где методы сохранения и загрузки:

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

public class EmployeeFileHandler implements Serializable{

 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");             

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Это решение проверяет EmployeeFileHandler и показывает ошибку, если, например, каталог не доступен для записи.Запустите с javac EmployeeFileHandler.java; java -ea EmployeeFileHandler, чтобы сбой при подтверждении.Убедитесь, что класс 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();
        }
    }
}
0 голосов
/ 19 января 2019


Я проверил ваш код, но не смог найти никаких проблем.
почему бы вам не попытаться поймать Throwable и проверить его отладкой?

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