Java - problem med att få ut data från objekt vid serialization/deserialization

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Mar 2004

Java - problem med att få ut data från objekt vid serialization/deserialization

Hej,

Det är så att jag skriver ett litet program som sparar ett objekt som innehåller namn och ett personnummer, detta sparas till en arraylist som i sin tur sparas till en .ser fil. Jag har en person-klass som implementerar serializable.

Min tanke är att jag vill läsa från filen med hjälp av att slänga in det jag har i filen till en arraylist så att jag kan printa ut flera objekt framöver. Jag kan se att objektet sparas så det är att få ut datan som är problemet.

Jag ser att felet är vid "recordList = (ArrayList)oIn.readObject();" men jag förstår inte varför?
"Exception in thread "main" java.lang.ClassCastException: testtt.person cannot be cast to java.util.ArrayList"

Jag har gjort på liknande sätt förut men nu vill det sig icke, några tips?

Såhär ser min kod ut

/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package testtt; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Sebastian */ public class Testtt { /** * @param args the command line arguments */ public static void main(String[] args) throws ClassNotFoundException { Testtt call = new Testtt(); System.out.println("Nu läser vi in lite information till fil"); call.saveObjectToFile(); System.out.println("-----------------------------------------"); System.out.println("-----------------------------------------"); System.out.println("Nu skriver vi ut information från fil"); System.out.println("-----------------------------------------"); System.out.println("-----------------------------------------"); call.readObjectFromFile(); } public void saveObjectToFile(){ try { ArrayList<person> saveList = new ArrayList<>(); String name = "Johan"; int ssn = 871220; String street = "Johansväg 32"; person person = new person(); File file = new File("person.ser"); ObjectOutputStream oOut = new ObjectOutputStream(new FileOutputStream(file, true)); person.setName(name); person.setSSN(ssn); saveList.add(person); oOut.writeObject(saveList); oOut.close(); } catch (IOException ex) { System.out.println("Något gick fel"); ex.printStackTrace(); } } public void readObjectFromFile() throws ClassNotFoundException{ try{ ArrayList <person> recordList = new ArrayList<>(); ObjectInputStream oIn = new ObjectInputStream(new FileInputStream("person.ser")); recordList = (ArrayList)oIn.readObject(); for(person list : recordList){ System.out.println(list.getName() + " " + list.getSSN()); } }catch(IOException ex){ System.out.println("Läsning från fil gick fel"); ex.printStackTrace(); } } }

Dold text

Tack på förhand!

"Happiness is only real when shared"

Trädvy Permalänk
Medlem
Plats
Umeå
Registrerad
Mar 2002

@sebbeharry
Din Fileoutpustream är ju ställd på att appenda, så du har nog försökt serialize:a ett person object direkt nån gång tidigare, och nu när du försöker öppna filen så är det gamla person-objektet (testtt.person) som kommer när du kör readObject() istället för ArrayList:en.

Så, ändra till false på din FileoutputStream och/eller ta bort person.ser filen så att den får skapa en ny.

The difference between stupidity and genius - the latter has limits

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Mar 2004
Skrivet av Zevon:

@sebbeharry
Din Fileoutpustream är ju ställd på att appenda, så du har nog försökt serialize:a ett person object direkt nån gång tidigare, och nu när du försöker öppna filen så är det gamla person-objektet (testtt.person) som kommer när du kör readObject() istället för ArrayList:en.

Så, ändra till false på din FileoutputStream och/eller ta bort person.ser filen så att den får skapa en ny.

Stort tack! Skönt att min kod inte hade något större fel!

Jag trodde att om jag använde 'true' så skulle den fortfarande ha kvar filen, med objekt i och lägga till ett nytt objekt när programmet körs igen (visserligen samma information).

"Happiness is only real when shared"