17. januar 2005 - 20:38Der er
17 kommentarer og 1 løsning
Læs alle objekter i filen.
Læser nogle objekter fra en fil og gemmer dem i en ArrayList på den her maade:
ArrayList orders = new ArrayList(); FileInputStream in = new FileInputStream("orders.dat"); ObjectInputStream p = new ObjectInputStream(in); orders.add((Order)p.readObject()); in.close();
Men hvordan for jeg den til at fortsaette med at indlæse all objekterne i filen og ikke kun det første. Kunne se at reaObject returnere et object eller -1 hvir der ikke er noget. Men hvordan fanden tester man på og den returnere -1. Har forsøg på mange maader men uden held :( Håber i kan hjaelpe. På forhaand tak.
readObject returnerer ikke -1 hvis der ikke er noget - den smider en exception.
Prøv:
ArrayList orders = new ArrayList(); FileInputStream in = new FileInputStream("orders.dat"); ObjectInputStream p = new ObjectInputStream(in); while(p.available() > 0) { orders.add((Order)p.readObject()); } in.close();
PS: Er du klar over at du kan skrive og læse en hel ArrayList med indhold med et enkelt kald til ObjectOutputStream writeObject og ObjectInputStream readObject ?
hmm det virker ikke som om det virker. Får denne her: Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size:0 at java.util.ArrayList.RangeCheck(ArrayList.java:507) at java.util.ArrayList.get(ArrayList.java:324) at PizzAdmin.main(PizzAdmin.java:32) Press any key to continue...
PizzAdmin linie 32 er: System.out.println(((Order)orders.get(0)).view_invoice());
Uden while løkken kan jeg sagtens udskrive den første (index nr. 0), men ikke med while løkken.
"PS: Er du klar over at du kan skrive og læse en hel ArrayList med indhold med et enkelt kald til ObjectOutputStream writeObject og ObjectInputStream readObject ? " Jo jeg prøvede oxo på det, men jeg har desvaerre lavet nogle af tingende lidt bøvlet så det ikke rigtig kom til at virke. Men kan godt vaere at jeg alligevel skoder det gamle og laver det om så jeg kan gemme hele arraylisten. Problemet lå i at vi fra starten havde lagt save metoden inde i det objektet selv. Dvs. at objektet skal gemme sig selv. f.eks. Order o = new Order(blablabla, blabla, bla); o.save(o);
hmm System.out.println(p.available()); siger 0. Men det kan ikke rigtig passe for den kan jo godt skrive den første ud. Filen fylder 2.41kb og vokser hver gange jeg køre min save function.
ja jeg søgte oxo lidt på .available() og fandt hurtigt ud af at jeg(din løsning) ikke er dem eneste der har haft problemer med den. Mne ok så dropper vi den løsning. Måske spørger jeg dumt nu, men hvordan fanger jeg EOF Exception ?
Har prøvet din kode og den ser da ud til at virke, men min faar jeg sgu fejl ved. Faar en java.io.StreamCorruptedException hvorefter den skriverdet første element ud. Derefter slutter den af med en exception fra ArrayListen : exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size:0 at java.util.ArrayList.RangeCheck(ArrayList.java:507) at java.util.ArrayList.get(ArrayList.java:324) at PizzAdmin.main(PizzAdmin.java:32)
Nej jeg har ikke rigtig andret på klasserne. Det maerkelige er jo oxo at det første element fungere fint men gaar galt med resten. Mne pga. jeg ikke er saa lagt fra deadline (skole opgave, kunne man jo taenke sig til) har jeg valg at bruge et af dine tidligere forslag og bare smale objekterne i en arraylist og saa skriv den til filen. Man kan saa diskutere hvorvidt det er smart eller ej (hvis man forstiller sig at der er mange objekter i arraylisten) da man så i princippet skal skrive hele arraylisten til filen hver gang man vil tilføje en order. Men mange tak for din hjælp, om ikke andet saa er jeg da blevet lidt klogere på java og dens metoder til at skrive/læse fra filer. ohhh ja.. smid et svar så du kan få mine velfortjænte point :D
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.