首页 > 解决方案 > 从文件中读取对象 - 消失的引用

问题描述

我正在尝试做这样的事情:

人; PersonList(ArrayList) 包含人;

摘要包含 PersonList;

SummaryList (ArrayList) 包含摘要。

接下来我想修改我的 Person 并将其保存到文件中,如下面的代码:

//first run
    personList.addPerson(); // PersonArrayList: [Person: Anonymous Person]

    summaryList.addSummary(personList); // SummaryArrayList: [Summary: Test,  PersonArrayList: [Person: Anonymous Person]]

    modifyPerson(personList); // set lastName to ModifiedPerson
    // PersonArrayList: [Person: Anonymous ModifiedPerson]
    // SummaryArrayList: [Summary: Test,  PersonArrayList: [Person: Anonymous ModifiedPerson]]

    save.savePersonListToDatabase(personList);
    save.saveSummaryToDatabase(summaryList);
/*
here is OK. Is one instance of PersonList and one instance of Person. Change in Person affect to both Lists.
end of first run
*/

接下来我想从文件中读取它。我使用此代码从文件中读取(类似于保存):

public Object readObjectFromFile(String filePath) throws IOException, ClassNotFoundException {
    fileInputStream = new FileInputStream(filePath);
    objectInputStream = new ObjectInputStream(fileInputStream);
    Object object = objectInputStream.readObject();
    System.out.println("Read " + filePath + " is OK");
    objectInputStream.close();
    return object;
}

public PersonList readPersonListFromDatabase() {
    try{
        String personFilePath = "PersonList.obj";
        personList = (PersonList) readObjectFromFile(personFilePath);
    } catch (IOException | ClassNotFoundException e) {
        e.printStackTrace();
    }
     return personList;
}

第二次运行:

//second run
    personList = read.readPersonListFromDatabase();
    summaryList = read.readSummaryListFromDatabase();
/*
here is NOT ok. There are two instances of PersonList and two instances of Person. Change in Person does
not affect on SummaryList (because there are different instances of it)
*/

我使用SerializableFileOutputStream/ObjectOutputStream来保存它。

我想运行程序,做我的事情,保存并关闭。在下一次运行中,我想从文件中读取所有内容。

如果我想在从文件读取后保留所有引用,我该怎么办?

标签: java

解决方案


最后,我找到了解决方案。

关注这篇文章https://stackoverflow.com/a/10374665/14558334

我创建了一个看起来像这样的“容器”类:

public class ClassContainer implements Serializable {
    private SummaryList summaryList;
    private PersonList personList;

    public ClassContainer(SummaryList summaryList, PersonList personList) {
        this.summaryList = summaryList;
        this.personList = personList;
    }
}

多亏了这一点,我只保存/读取了一个对象,每个引用都保存了。

也许这不是最好的解决方案,但它工作正常。


推荐阅读