gpt4 book ai didi

java - 反序列化包含 arraylist 内容的文件仅显示 1 个元素存在

转载 作者:行者123 更新时间:2023-12-02 13:07:17 25 4
gpt4 key购买 nike

因此,我在程序启动时加载该文件,并向其中添加任何值,然后保存它。当我再次加载时,仅显示第一个元素存在(size() 返回 1)为什么不显示新添加的元素?

String name;
String desig;
String age;
static ArrayList<Person> personarray = new ArrayList<Person>();

private void SaveButton(java.awt.event.ActionEvent evt) {

Person newperson = new Person();
name = jTextField1.getText();
age = jTextField2.getText();
desig = jTextField3.getText();


newperson.saveData(name, age, desig);
personarray.add(newperson);

try{
FileOutputStream fileOut = new FileOutputStream(System.getProperty("user.dir") +"/info.dat", true);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(personarray);
out.close();
fileOut.close();
System.out.print("done");
}
catch(IOException i) {
i.printStackTrace();
}
}


private void LoadButton(java.awt.event.ActionEvent evt) {
ArrayList<Person> retrievedList = null;
try {
FileInputStream fileIn = new FileInputStream(System.getProperty("user.dir") +"/info.dat");
ObjectInputStream in = new ObjectInputStream(fileIn);
retrievedList = (ArrayList<Person>) in.readObject();
in.close();
fileIn.close();
}catch(IOException i) {
i.printStackTrace();
return;
}catch(ClassNotFoundException c) {
System.out.println("class not found");
c.printStackTrace();
return;
}
Person temp = null;
for(int i = 0; i < retrievedList.size(); i++ ){
temp = retrievedList.get(i);

jTable1.getModel().setValueAt(temp.name, i, 0);
jTable1.getModel().setValueAt(temp.age, i, 1);
jTable1.getModel().setValueAt(temp.desig, i, 2);
}
public static void main(String args[]) {
personarray = getSavedList(); // gets the file similar to LoadButton
System.out.print(personarray.size());
try {

File file = new File(System.getProperty("user.dir") +"/info.dat");

if (file.createNewFile()){
System.out.println("File is created!");
}else{
System.out.println("File already exists.");
}

} catch (IOException e) {
e.printStackTrace();
}

最佳答案

我怀疑问题是您正在附加到文件。您使用new FileOutputStream(System.getProperty("user.dir") +"/info.dat", true) 。第二个参数 true ,导致在文件末尾写入字节而不覆盖现有文件内容。所以旧版本的人员列表仍然在文件的开头,这就是您从文件中读取时读取的版本。

尝试输入 false而是在那里。

关于java - 反序列化包含 arraylist 内容的文件仅显示 1 个元素存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44097330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com