Я намагаюся зберегти стан своїх предметів у файлі.У мене є перелік тем, і я записую їх у файл. І я прочитав об'єкт назад. Але коли я додаю їх до списку, я отримую виняток класу. Я бачу, що об'єкт повертається з усіма значеннями, але не може передати їх у список.
Це мій список предметів
private List<Subject> subjects;
FileOutputStream fileStream = new FileOutputStream("SaveFile", true);
ObjectOutputStream objectStream = new ObjectOutputStream(fileStream);
objectStream.writeObject(subjects);
objectStream.close();
Це код, який я читаю з файлу
FileInputStream inStream = new FileInputStream("SaveFile");
ObjectInputStream obStream = new ObjectInputStream(inStream);
List<Subject> newSubjects = (List<Subject>)obStream.readObject();
Ось виняток
java.lang.ClassCastException: [Ljava.lang.Об'єкт; не можна передати в java.util.List на WebPageUpdateNotifier.Memento.getSavedData (Memento.java:43) на WebPageUpdateNotifier.Client.run (Client.java:66) на WebPageUpdateNotifierTest.ClientTest.testGetSubjectList (ClientTest.java:24) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Рідний метод) at sun.reflect.NativeMethodAccessorImpl.invoke (Невідоме джерело)
Я щось роблю не так? Я багато гуглив, але виявив правильність синтаксису. Будь-яка допомога буде вдячна.
Відповіді:
1 для відповіді № 1Я думаю, проблема полягає в тому, що ви "додаєте файл, замість того, щоб писати новий вміст. Якщо якийсь об'єкт раніше був серіалізований, а потім ви серіалізуєте List<Subject>
додавши файл, тоді після десериалізації ви отримаєте старий об’єкт.
Спробуйте видалити логічний аргумент із виклику конструктора FileOutputStream
:
FileOutputStream fileStream = new FileOutputStream("SaveFile");
замість
FileOutputStream fileStream = new FileOutputStream("SaveFile", true);
-1 для відповіді № 2
Як obStream.readObject (); повертає об'єкт, а не список об'єктів. Ви можете підготувати список, як показано нижче:
List<Subject> newSubjects;
while ((obj = (Subject)objIn.readObject()) != null) {
newSubjects.add(obj);
}