ich habe eine frage zum Thema "Schreiben und Lesen von Dateien"..
Ich habe ein Programm geschrieben, welches Daten in 9 ArrayLists und einer JList verarbeitet.
Nun möchte ich, dass man auf Wunsch den aktuellen Inhalt der Listen speichert.
Zur Indikation:
Jedem Object aus der JList ist ein String aus den je 9 ArrayListen zugeordnet, bzw. die Indizes der zusammengehörenden Objects ist in allen Listen gleich.
Drückt man also in meinem Programm den zweiten Eintrag (Index 0), fragt er aus allen Listen den Eintrag mit Index=0 ab und schreibt sie in verschiedene Textfelder.
Mein Ziel ist es dass ich wenn ich das Programm schließe und danach wieder öffne, dass der Inhalt von dem letzten Schließen wiederhergestellt wird und ich weiter Elemente hinzufügen und löschen kann..
Wie kann ich das am einfachsten und besten implementieren?
Ich hatte eventuell an eine XML-File gedacht in die alle Strings geschrieben werden..
Gibt es einfache, bzw. bessere Methoden?
Jedem Object aus der JList ist ein String aus den je 9 ArrayListen zugeordnet, bzw. die Indizes der zusammengehörenden Objects ist in allen Listen gleich.
Drückt man also in meinem Programm den zweiten Eintrag (Index 0), fragt er aus allen Listen den Eintrag mit Index=0 ab und schreibt sie in verschiedene Textfelder.
Das hört sich nach einer ziemlichen Krücke an. Besser man definiert sich eine Klasse die diese Attribute in einem Objekt hält. Und arbeitet dann mit Objekten dieser Klasse und nur noch einer ArrayList und ohne die Abfrage aus anderen Listen.
Wie kann ich das am einfachsten und besten implementieren?
Ich hatte eventuell an eine XML-File gedacht in die alle Strings geschrieben werden..
Gibt es einfache, bzw. bessere Methoden?
Grundsätzlich bietet Java die Möglichkeit der Serialisierung und Deserialisierung - auch als XML.
Alternativen: Datenhaltung in einer Datenbank, selbst über die Listeneinträge iterieren und in eine Datei schreiben...
ich bin noch Java-Anfänger und habe mir die Grundlagen in der Schule angeeignet. Ich bin erst in der Stufe 12 und habe noch einiges vor mir
Aber die Idee, dass es so gehen könnte wie du es geschildert hast ist mir auch gekommen, ich hatte nur nicht den leisesten Ansatz zum schreiben..
Vielleicht hast du ja einen Link für mich, wo ich mir zu dem Thema etwas durchlesen kann. Es hört sich nämlich wesentlich "einfacher" an als das was ich bereits implementiert habe...
Das mit den Datenbanken würde meinen Zeitrahmen sprengen, da ich mich auch hier erst einlesen müsste und wird auch in der Schule erst nächstes Halbjahr behandelt ... Das andere werde ich mir anschauen, ich hoffe ich werde etwas passendes finden
Danke nochmal für deine schnelle Antwort..
Mfg CreaaZ
Danke für den Link, soweit habe ich das Prinzip des Output/Input Streams verstanden. Nur eine Frage drängt sich mir noch auf. Muss ich für jede ArrayList eine solche Methode implementieren, wenn ich bei meiner "9 ArrayListen"-Software bleibe? Bzw. wenn nicht, wie kann ich sicher stellen, dass die ArrayListen in der selben Reihenfolge gelesen wie eingespeichert werden?.. Ich habe ja quasi nur ein "ObjectOutputStream" wo die Daten abgefangen werden.. Oder sähe dass dann bei mir so aus?
Noch mal der Hinweis zusammengehörende Attribute in einem gemeinsamen Objekt zu halten, statt zu versuchen drei Listen zu "synchronisieren". Das mit den anderen zwei Listen ist unnötig, kompliziert und fehleranfällig.
Hier mal eine Demo zur De/Serialisierung - sogar inkl. Demo Attribute in einem gemeinsamen Objekt zusammen zufassen:
Java:
importjava.io.*;importjava.util.*;publicclassSerializeExample2{publicSerializeExample2(){List<Person> list;
list =newArrayList<Person>();
list.add(newPerson("Olaf",10));
list.add(newPerson("Heinz",11));try{System.out.println("Liste vor der Serialisierung:");System.out.println(Arrays.toString(list.toArray()));ObjectOutputStream out =newObjectOutputStream(newFileOutputStream("c:\\save.txt"));
out.writeObject(list);
out.close();System.out.println();ObjectInputStream in =newObjectInputStream(newFileInputStream("c:\\save.txt"));List<Person> newList =(ArrayList<Person>)in.readObject();
in.close();System.out.println("Per Deserialisierung geladene Liste:");System.out.println(Arrays.toString(newList.toArray()));}catch(Exception e){e.printStackTrace();}}publicstaticvoidmain(String[] args){newSerializeExample2();}}classPersonimplementsSerializable{privateString name;privateInteger alter;publicPerson(String name,int alter){this.name = name;this.alter =newInteger(alter);}publicStringtoString(){return name +"("+ alter +")";}}