Выписывается в консоль намного больше обьектов чем я добавил в файл - Java
я в файл.ser додавляю три обьекта, но когда пытаюсь их вывести выводится те же три обьекта но очень много раз, почему так происходит?
Student student01 = new Student(daneImieNazwisko[0], daneImieNazwisko[1], daneOceny[0], daneOceny[1], daneOceny[2], daneOceny[3], daneOceny[4]);
System.out.print("\nDane studenta1: \n");
System.out.print(student01.showImieNazwisko() + "\n");
System.out.print(student01.showOceny());
System.out.print("\n");
Student student02 = new Student(daneImieNazwisko[2], daneImieNazwisko[3], daneOceny[5], daneOceny[6], daneOceny[7], daneOceny[8], daneOceny[9]);
System.out.print("\nDane studenta2: \n");
System.out.print(student02.showImieNazwisko() + "\n");
System.out.print(student02.showOceny());
System.out.print("\n");
Student student03 = new Student(daneImieNazwisko[4], daneImieNazwisko[5], daneOceny[10], daneOceny[11], daneOceny[12], daneOceny[13], daneOceny[14]);
System.out.print("\nDane studenta3: \n");
System.out.print(student03.showImieNazwisko() + "\n");
System.out.print(student03.showOceny());
System.out.print("\n");
ArrayList<Student> students = new ArrayList<>();
try {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("wynikiStudenci.ser"));
students.add(student01);
students.add(student02);
students.add(student03);
for (Student student : students) {
objectOutputStream.writeObject(student);
}
objectOutputStream.flush();
objectOutputStream.close();
System.out.print("Dane studentow zostaly zapisane do pliku \"wynikiStudenci.ser\"");
} catch (Exception exc) {
System.out.print("Blad: " + exc);
}
System.out.print("\n");
try {
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("wynikiStudenci.ser"));
while (true) {
try {
students.add((Student) objectInputStream.readObject());
for (Student student : students) {
System.out.print("\n" + student.showImieNazwisko() + "\n" + student.showOceny());
}
} catch (EOFException exc) {
break;
}
}
objectInputStream.close();
} catch (Exception exc) {
System.out.print("Blad: " + exc);
}
Ответы (1 шт):
Автор решения: nikoshi
→ Ссылка
Вы записываете в ArrayList экземпляры Student дважды. В первый раз при записи их в файл и второй раз при считывании их из файла. Итого у вас там 6 объектов Student.
Или используйте два разных ArrayList - один для записи в файл и другой для чтения из файла или удалите объекты Student из списка students после записи в файл, например так:
students.removeAll(students);
Также там проблема в логике вывода объектов на консоль. Нужно вынести цикл for из цикла while