使用序列化从两个不同的模型列表中读取先前保存的对象

时间:2018-10-28 23:56:20

标签: java serialization deserialization

我需要从两个单独的模型列表类的不同输入和输出流中读取以前保存的对象。

我整天都在这个网站上搜索。似乎有关于序列化的信息,但是我找不到适合我的特定问题的任何东西。

我有两个模型列表类,一个FlashCardList和一个UserList。我将这些类的所有内容都转移到两个对象ArrayLists中。我的FlashCardList有一个文件,而UserList有另一个文件。

在读写每个文件时,我将创建一个新的新FileInputStream,新FileOutputStream,新ObjectInputStream和新ObjectOutputStream。

我尝试过: 将serialVersionUID添加到我的FlashCard和User类。 使用for循环/ 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文件是否应该看起来不可读?

A picture of my .ser file for my flashCards

感谢您提供有关序列化的所有帮助!

0 个答案:

没有答案