Опитвам се да запазя състоянието на моите субекти във файл. Имам списък с теми и ги записвам във файла. И аз прочетох обекта обратно. Но когато ги хвърля в списъка, получавам изключение от класа. Мога да видя, че обектът се връща с всички стойности, но не може да ги прехвърли в списъка.
Това е моят списък от теми
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 (неизвестен източник)
Правя ли нещо нередно? Аз googled много, но намерих синтаксиса да бъде прав. Всяка помощ ще бъде много оценявам.
Отговори:
1 за отговор № 1Мисля, че проблемът е, че вие добавяте към файла, вместо да пишете ново съдържание. List<Subject>
като добавите към файла, след депортирането ще получите стария обект.
Опитайте да премахнете булевия аргумент от повикването на конструктора на FileOutputStream
:
FileOutputStream fileStream = new FileOutputStream("SaveFile");
вместо
FileOutputStream fileStream = new FileOutputStream("SaveFile", true);
-1 за отговор № 2
Като obStream.readObject (); връща Object не списък на Object. Можете да изготвите списък по-долу:
List<Subject> newSubjects;
while ((obj = (Subject)objIn.readObject()) != null) {
newSubjects.add(obj);
}