Чтение ранее сохраненных объектов из двух разных списков моделей с использованием сериализации - PullRequest
0 голосов
/ 29 октября 2018

Мне нужно прочитать ранее сохраненные объекты из разных входных и выходных потоков из двух отдельных классов списка моделей.

Я искал на этом сайте большую часть дня.Похоже, что есть информация о сериализации, но я не смог найти ничего подходящего для моей конкретной проблемы.

У меня есть два класса списка моделей, FlashCardList и UserList.Я перенес все содержимое этих классов в два объекта ArrayLists.У меня есть файл для моего FlashCardList и второй файл для моего UserList.

При чтении и записи в каждый файл я создаю новый новый FileInputStream, новый FileOutputStream, новый ObjectInputStream и новый ObjectOutputStream.

Я пытался: добавление serialVersionUID в мои классы FlashCard и User.Использование циклов for loop / while для чтения и чтения до конца файла при добавлении каждого объекта обратно в исходный ArrrayList (без кубиков).Приведение ObjectInputStream как ArrayList вместо объекта.Очистка ObjectOutputStream.Использование абсолютного пути к файлу при создании FileInputStream.Использование разных выходных и входных потоков для каждого списка моделей.Убедитесь, что все соответствующие классы реализуют интерфейс Serializable.Поговорил с репетитором для лучшего понимания, но он также не знал, что случилось с моей программой.Плач.

public SerializeModelClasses() {
        this.flashCardList = new FlashCardList();
        this.userList = new UserList();

        this.listOfFlashCardsFileName = new File("src/listOfFlashCards.ser");
        this.listOfFlashCards = new ArrayList(flashCardList.getFlashCards());
        this.listOfUsers = new ArrayList(userList.getUserArrayList());
        this.listOfUsersFileName = new File("src/listOfUsers.ser");

        HelloHelloWhereAREYOUFILE();

        flashCardListSerialization();
        userListSerialization();
    }

public void readFlashCardListFile() {

        try {
            fis = new FileInputStream(listOfFlashCardsFileName);

            in = new ObjectInputStream(fis);

            listOfFlashCards.add((FlashCard) in.readObject());
            listOfFlashCards.add((FlashCard) in.readObject());
            listOfFlashCards.add((FlashCard) in.readObject());
            while (true) {
                FlashCard temp = (FlashCard) in.readObject();
                this.listOfFlashCards.add(temp);

            }

        } catch (EOFException e) {
            e.getMessage();
        } catch (IOException e) {
            e.getMessage();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        } finally {
            try {

                in.close();
            } catch (IOException ex) {
                Logger.getLogger(SerializeModelClasses.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public void writeFlashCardListFileRetry() {
        System.out.println("Writing objects to FlashCard File");
        for (int i = 0; i < listOfFlashCards.size(); i++) {
            try {
                fos = new FileOutputStream(listOfFlashCardsFileName.getAbsoluteFile(), true);
                oos = new ObjectOutputStream(fos);

                oos.writeObject(listOfFlashCards.get(i));
                oos.flush();

            } catch (FileNotFoundException ex) {
                Logger.getLogger(SerializeModelClasses.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(SerializeModelClasses.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }
public void readUserListFile() {
        try {
            fis = new FileInputStream(listOfUsersFileName.getAbsoluteFile());
            in = new ObjectInputStream(fis);

            User temp = (User) in.readObject();
            this.listOfUsers.add(temp); 
            System.out.println("Reading Users from the User File");
            for (int i = 0; i < listOfUsers.size(); i++) {
                User currentUser = (User) listOfUsers.get(i);
                System.out.println(currentUser.getUserName());
                System.out.println(currentUser.getUserPassword());
            }
            if (!listOfUsers.isEmpty()) {
                System.out.println("There are users in the user list");
            }
            in.close();

        } catch (EOFException e) {
            e.getMessage();
        } catch (IOException e) {
            e.getMessage();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }

    }

    public void writeUserListFile() {

        System.out.println("Writing objects to List of Users to the File");
        for (int i = 0; i < listOfUsers.size(); i++) {
            try {

                fos = new FileOutputStream(listOfUsersFileName.getAbsoluteFile(), true);
                oos = new ObjectOutputStream(fos);
                oos.writeObject(listOfUsers.get(i));
                oos.flush();

            } catch (FileNotFoundException ex) {
                Logger.getLogger(SerializeModelClasses.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(SerializeModelClasses.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

Я также хочу знать, должен ли мой файл .ser выглядеть таким нечитаемым?

Изображение моего файла .ser для моих flashCards

Спасибо за любую помощь в изучении сериализации!

...