从文件中重复写入和加载对象的 ArrayList
Posted
技术标签:
【中文标题】从文件中重复写入和加载对象的 ArrayList【英文标题】:Repeated Writing and Loading ArrayList of objects from a file 【发布时间】:2017-04-26 00:31:31 【问题描述】:我有一个“Person”类,我在其中存储了姓名、姓氏等数据。我创建了 5 个对象类型 Person,将它们添加到 ArrayList,然后将此 ArrayList 保存到文件中。接下来我从这个文件 ArrayList 加载,我有 5 个人。问题是当我想再次保存例如 10 个对象人时。当我从文件中加载 ArrayList 时,我从第一次写作开始只有 5 个人。如果我重复这个,我将从第一次写入这个文件开始加载数据。我该如何解决这个问题?
public class Data
static List<Person> persons = new ArrayList<Person>();
public static void main(String[] args) throws IOException
Data.savePersons(5);
Data.loadPersons();
/** Clean 'persons' array for TEST of load data */
persons.removeAll(persons);
System.out.println("\n-----------\nNext Round\n-----------\n");
Data.savePersons(10);
Data.loadPersons();
/** Save a couple of Person Object to file C:/data.ser */
public static void savePersons(int noOfPersonToSave) throws IOException
FileOutputStream fout = null;
ObjectOutputStream oos = null;
/** Make 5 'Person' object and add them to ArrayList 'persons' for example */
for (int i = 0; i < noOfPersonToSave; i++)
Person personTest = new Person("name" + i, "surname" + i, "email" +i, "1234567890" +i);
persons.add(personTest);
try
fout = new FileOutputStream("C:\\data.ser", true);
oos = new ObjectOutputStream(fout);
oos.writeObject(persons);
System.out.println("Saving '" + persons.size() + "' Object to Array");
System.out.println("persons.size() = " + persons.size());
System.out.println("savePersons() = OK");
catch (Exception ex)
System.out.println("Saving ERROR: " + ex.getMessage());
finally
if (oos != null)
oos.close();
/** Load previously saved a couple of Person Object in file C:/data.ser */
public static void loadPersons() throws IOException
FileInputStream fis = null;
ObjectInputStream ois = null;
try
fis = new FileInputStream("C:\\data.ser");
ois = new ObjectInputStream(fis);
persons = (List<Person>) ois.readObject();
//persons.add(result);
System.out.println("-------------------------");
System.out.println("Loading '" + persons.size() + "' Object from Array");
System.out.println("persons.size() = " + persons.size());
System.out.println("loadPersons() = OK");
catch (Exception e)
System.out.println("-------------------------");
System.out.println("Loading ERROR: " + e.getMessage());
finally
if (ois != null)
ois.close();
class Person implements Serializable
private static final long serialVersionUID = 1L;
private String name;
private String surname;
private String mail;
private String telephone;
public Person(String n, String s, String m, String t)
name = n;
surname = s;
mail = m;
telephone = t;
public String getName()
return name;
public String getSurname()
return surname;
public String getMail()
return mail;
public String getTelephone()
return telephone;
【问题讨论】:
您是否在某个文件资源管理器中检查过data.ser
的内容?
【参考方案1】:
new FileOutputStream("C:\\data.ser", true)
您将 true
传递给 append
参数。因此,在现有的 5 人列表之后,您要在文件中附加 10 人的列表。由于您只阅读了一个列表,因此您阅读了您写的第一个列表,其中包含 5 个人。
传递 false 而不是 true。
【讨论】:
没有。 ObjectOutputStream 不附加任何内容。 FileOutputStream 可以。 OP不写人。他写 List以上是关于从文件中重复写入和加载对象的 ArrayList的主要内容,如果未能解决你的问题,请参考以下文章