Input/Output Im Programm instanzierte Objekte Speichern und laden

kneubi

Mitglied
Hallo zusammen

Ich bin momentan auf der Suche nach Beratung für mein Javaprogramm.

Es hat ein GUI, diverse Elemente und die Daten werden und in ArrayLists abgespeichert(instanzierte Objekte).

Nun müsste ich aber die Daten alle Speichern können und wieder Laden... da das Programm ja irgendwann beim PC ausschalten auch geschlossen werden muss...

Nun ist die Frage.. wie soll ich das anstellen? Ich habe serialisieren und deserialisieren gelesen, da raten aber alle man müsse aufpassen wegen der serial ID die man vergibt... Denn wenn man etwas am Code ändern funktioniert das Laden der Daten unter umständen nicht mehr(aber ich habe noch nichts gefunden was ich denn sicherstellen muss dass es auch nach Codeänderungen noch funktionert). Zusätzlich meldet mir Eclipse dass ich noch keine Serial ID vergeben habe. Gibt es noch andere möglichkeiten?

Die Daten können leider in keine Datenbank gespeichert werden die zusätzliche Software benötigt.. Da die Software auf Clients läuft und ich will meinen Leuten nicht zumuten jedesmal noch eine MYSQL-Datenbank lokal zu installieren...

Ideal wäre ein Speichern in eine Datei. Nur fehlen mir die Stichworte nach was ich Suchen könnte. Hat jemand Vorschläge wie man dies machen könnte? Oder allenfalls tipps beim serialisieren und deserialisieren, worauf ich genau achten muss? Die Daten müssen über mehrere Monate geladen werden können und falls noch irgendwo eine Situation nicht abgehandelt werden kann muss ich entsprechend den Code anpassen..

Gruss
Kneubi
 
Die normale Java Serialisierung ist ein einfacher und bequemer Weg Javaobjekte zu speichern und zu laden. Du kannst die Objekte natürlich auch per Hand serialisieren, je nachdem was das für Objekte sind macht das mehr oder weniger sinn.
Eine Klasse Rechteck könntest du bspw. als XML so abspeichern:
[XML]<rectangle>
<width>1234</width>
<height>123</height>
</rectangle>[/XML]
(so ähnlich macht Java das dann auch).

Die serialVersionUid hat den Hintergrund dass Java feststellen kann ob die gespeicherten Daten geladen werden können oder nicht. Speichert jemand mit Version 2.0 deines Programmes was ab, und jemand anderes mit Version 1.8 versucht das dann zu laden gibts ne entsprechende Meldung.

Da die Software auf Clients läuft und ich will meinen Leuten nicht zumuten jedesmal noch eine MYSQL-Datenbank lokal zu installieren...
Es gibt auch embedded databases, die müssen nicht installiert werden sondern liegen "in deinem Programm", da bekommt der User dann in der Regel gar nichts von mit.

Die Daten müssen über mehrere Monate geladen werden können
Das klappt natürlich nur wenn sich dein Programm nicht ändert. Aber dann ist das auch überhaupt kein Problem.

Was für Objekte willst du da denn überhaupt speichern?
 
Es gibt verschiedene Möglichkeiten:
  • Du nimmst dir alle Daten einzeln und schreibst sie einfach so in eine Datei ... Zeile für Zeile
  • Du speicherst dir deine Objekte in ein XML File ab (Hinweis: XStream ist dafür sehr einfach zu benutzen)
  • Objektorientierte Datenbanken, die einfach nur ein File als Speicherort haben (db4j z.B.)
  • Java Properties (Key Value Files) ... sind direkt ohne weitere Libs nutz, speicher - und lesbar
 
Zum einen sind es eigene erstellte objekte mit ein paar String, integer und boolean variabeln mit ein paar Arraylists indem die objekte abgelegt werden. Es gibt noch AbstractTableModels und DefaultListModels abr die werden von einer ArrayList abgefüllt... somit müsste ich die nicht absichern

Zum Thema Serialisieren, kann ich da irgend eine ID nehmen? und was... wenn ich neue funktionen hinzufüge, die Datenstruktur aber sonst gleich bleibt? aktuell ist die daten Struktur so:

Auf dem Gui gibt es eine ArrayList. Darin werden die ersten Objekte referenziert. Jedes dieser objekte hat mind. eine weitere ArrayList in der noch mehr Objekte Referenziert werden.. usw usw usw... gibt also eine Baumstruktur. Wenn ich zb einen neuen Ast hinzufüge... würde mit serealisieren die Daten nicht mehr geladen werden können weil er nicht weiss was in diesen "ast" geschrieben werden muss?
 
Zuletzt bearbeitet:

Zurück
Oben