2012-12-18, 18:43
  #1
Medlem
Först och främst så vet jag att man inte behöver spara enskilda objekt i en arraylist för sig när man sparar sina objekt i en fil, utan man kan spara hela arraylisten. Dock så påbörjade jag det på det sättet och måste nu bara bevisa att det går att göra så (vilket det självklart går!).

Objekten sparas precis som dom ska i fil.obj, men när jag ska läsa in objekten så får jag ett stort problem!

Här är koden som sparar objekten i filen:

--------------------------

try
{
FileOutputStream file = new FileOutputStream("fil.obj");
ObjectOutputStream someObjects = new ObjectOutputStream(file);
for (Hej a : hejArrayList)
someObjects.writeObject(a);
}
catch (IOException e)
{
System.out.println("IO-fel. Hejdå!");
System.exit(1);
}

--------------------------------

Här kommer sedan koden i mitt main som försöker läsa in objekten från filen och konvertera tillbaka objecten till Hej-objekt:

--------------------------------

try
{
FileInputStream file = new FileInputStream("fil.obj");
ObjectInputStream someObjects = new ObjectInputStream(file);
for (Object a : someObjects)
{
a = (Hej)someObjects.readObject();
hejArrayList.add(a);
}
}
catch (FileNotFoundException e)
{
System.out.println("Ingen fil funnen!");
}
catch (IOException e)
{
System.out.println("IO-fel!");
}
catch (ClassNotFoundException e)
{
System.out.println("Class-fel! Class ej funnen!");
}

---------------------------

Delvis gnäller den på att objekten jag försöker kasta in i ArrayListen kennel är av typen Object, vilket är konstigt eftersom jag innan det castar om objecten till ett Hej-objekt.

Dessutom så klagar den i raden "for (Object a : someObjects)" och säger "Can only iterate over an array or an instance of java.lang.iterable". Men det verkar ju skumt, man måste väl kunna spara lösa objekt, eller? Eller måste det alltid sparas i nån typ av array/lista?

Jag provade att köra en vanliga for-loop, typ "for (int y = 0; y <= someObjects.availible(); y++)", men det resulterade bara i att det första Hej-objektet laddades in, medans de andra Hej-objekten glömdes bort.

Tips?
Citera
2012-12-18, 19:23
  #2
Medlem
ojns avatar
Läs den klistrade tråden gällande CODE-taggar.
Citera
2012-12-19, 07:01
  #3
Medlem
kelebs avatar
Citat:
Ursprungligen postat av Janejja
Först och främst så vet jag att man inte behöver spara enskilda objekt i en arraylist för sig när man sparar sina objekt i en fil, utan man kan spara hela arraylisten. Dock så påbörjade jag det på det sättet och måste nu bara bevisa att det går att göra så (vilket det självklart går!).

Objekten sparas precis som dom ska i fil.obj, men när jag ska läsa in objekten så får jag ett stort problem!

Här är koden som sparar objekten i filen:

--------------------------


---------------------------

Delvis gnäller den på att objekten jag försöker kasta in i ArrayListen kennel är av typen Object, vilket är konstigt eftersom jag innan det castar om objecten till ett Hej-objekt.

Dessutom så klagar den i raden "for (Object a : someObjects)" och säger "Can only iterate over an array or an instance of java.lang.iterable". Men det verkar ju skumt, man måste väl kunna spara lösa objekt, eller? Eller måste det alltid sparas i nån typ av array/lista?

Jag provade att köra en vanliga for-loop, typ "for (int y = 0; y <= someObjects.availible(); y++)", men det resulterade bara i att det första Hej-objektet laddades in, medans de andra Hej-objekten glömdes bort.

Tips?

Titta vad fint det blev när jag la till code-taggar. Och betydligt lättare att läsa.

Det du försöker göra är att iterera över en ObjectInputStream. Den implementerar inte interfacet Iterable och kan således inte användas på det sättet. Du bör använda dig av en whileloop istället och iterera så länge som det som läses in är skilt från null.
Du castar det du läser in, men direkt efter så sparar du det som ett Object igen och informationen om att det kanske var av en annan klass går förlorad. Antag att jag skriver
Object obj = new SomeClass();
Efter detta kan du bara använda de Object-gemensamma delarna i SomeClass i obj. För att kunna använda de specifika delarna för SomeClass måste din referens också vara av SomeClass. Alternativt castar du och använder samtidigt.
Kod:
if (obj instanceof SomeClass){
  ((SomeClass)obj).someMethod();
}
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in