我正在创建一个GUI,我使用Student对象返回数据类型的方法“getStudentInfo()”从JTextFields检索信息并将它们存储到“student”对象中。
public Student getStudentInfo() {
Student student = new Student();
String name = jtfName.getText();
student.setName(name);
String idNumber = jtfIDNumber.getText();
student.setIdNumber(idNumber);
String address = jtfAddress.getText();
student.setAddress(address);
String phoneNumber = jtfPhoneNumber.getText();
student.setPhoneNumber(phoneNumber);
String major = jtfMajor.getText();
student.setMajor(major);
return student;
}
然后,在另一个类中,我创建一个“添加”按钮,单击该按钮时,应该将“student”对象添加到ArrayList中,然后将ArrayList写入二进制文件。
private class AddButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
File studentFile = new File(FILENAME);
ArrayList<Student> studentList = new ArrayList<Student>();
studentList.add(text.getStudentInfo());
try {
FileOutputStream fos = new FileOutputStream(studentFile);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(studentList);
}
catch (FileNotFoundException fnf) {
fnf.printStackTrace();
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
但是当我运行该程序并编写学生的信息并将其添加到二进制文件中时,我会添加另一名学生,它会完全覆盖以前学生的信息。任何帮助将不胜感激。
答案 0 :(得分:0)
在您的类的actionPerformed方法AddButtonListener中,您有以下代码行:
FileOutputStream fos = new FileOutputStream(studentFile);
此构造函数将打开文件,以便将字节写入文件的开头。由于每次单击按钮时都重新打开此文件,因此您将使用新数据替换文件内容。相反,使用带有boolean参数的构造函数来附加字节而不是覆盖...
FileOutputStream fos = new FileOutputStream(studentFile, true);
您可以在java文档中查看此构造函数的详细信息...