# Arraylist speichern und laden?



## java_developer (11. Apr 2014)

Guten Abend,

Ich bastle bereits seit längerem an einer Art Telefonbuch. Ich bin froh, dass das Programm soweit funktioniert, allerdings muss man jedes mal von vorne anfangen, wenn man das Programm neu startet. 

Wie schaffe ich es die Arraylist mit den Einträgen abzuspeichern bzw. auch wieder zu laden?

Ich würde mich freuen, wenn mir jemand weiterhelfen könnte. 

Danke schonmal


----------



## java_developer (11. Apr 2014)

Kleiner Nachtrag:

Ich müsste natürlich auch die Objekte der Klasse "Eintrag" abspeichern, welche ich dann zur Arraylist (Arraylist<Eintrag>) hinzugefügt habe.


----------



## Vancold (11. Apr 2014)

Hallo!



Schreib dir doch zwei Unter-Programme, eines das die gespeicherten Daten ladet (Loader) und eines das sie speichert (Exporter).
Wenn du Probleme hast ein gutes Format zu finden dann würde ich dir für den Anfang CSV zu speichern.


CSV bedeutet Comma-Seperated Values.

Das heißt das deine Informationen durch ein Trennzeichen (in dem Fall das Comma) gespeichert werden.



Hier ein Beispiel:


Karl Maier; München; Musterstraße 12 ;06603040231; karl.maier@hotmail.com;

Diesen Datensatz liest du mit dem Loader aus. Zeilenweise!
Danach trennst du die Werte auf und dadurch bekommst du ein String-Array von Werten.

Dann hast du deinen einzelnen Daten die du ins Objekt schreiben kannst.



Der Exporter sollte alle Daten welche neu hinzugefügt werden speichern 
(Falls schon Daten vorhanden sind wäre es ja zu großer Aufwand 100000 Einträge nochmal zu speichern; Ist zwar Utopisch, aber eigentlich logisch)
Diese werden nach einem von dir festgelegten Datenschema in CSV Format gespeichert!


Das kannst du in einzelnen Datein machen oder alle in eine große Datei packen, je nach dem wie viel Informationen du pro Kontakt speichern willst.


Wichtig ist das du wenn du im CSV Format arbeitest das du den Zeilenumbruch richtig reinschreibst und die Daten richtig ausliest bzw. ausliest.



Im Endeffekt macht dann deine GUI oder Ausgabe nichts außer die Daten auszugeben!


LG

Rene


----------



## Androbin (12. Apr 2014)

Versuchs doch mal mit Serializing !!!


----------



## java_developer (13. Apr 2014)

Danke erstmal an alle! :toll:

Ich habe das ganze jetzt mit der Serialisierung gelöst. Hier sind ein paar Teile aus meinem Code:


```
public static ArrayList<Eintrag> eintraege = new ArrayList<Eintrag>();

public static void main(String[] args) {
   for (Eintrag e : load()) {
       eintraege.add(new Eintrag(e.getName(), e.getAlter() /*...*/ ));
   }
}

public static void save(ArrayList<Eintrag> eintraege) {
   try {
       FileOutputStream fos = new FileOutputStream(
       "C:\\Ordner1\\Ordner2\\Ordner3\\data.bin");
       ObjectOutputStream oos = new ObjectOutputStream(fos);

       oos.writeObject(eintraege);
       oos.close();
       fos.close();
   } catch (IOException ioe) {
       ioe.printStackTrace();
   }
}

private static ArrayList<Eintrag> load() {
   ArrayList<Eintrag> eintraege = new ArrayList<Eintrag>();
   try {
       FileInputStream fis = new FileInputStream(
       "C:\\Ordner1\\Ordner2\\Ordner3\\data.bin");
       ObjectInputStream ois = new ObjectInputStream(fis);

       eintraege = (ArrayList) ois.readObject();
       ois.close();
       fis.close();
   } catch (IOException ioe) {
       ioe.printStackTrace();
   } catch (ClassNotFoundException c) {
       System.out.println("Class not found");
       c.printStackTrace();
   }
   return eintraege;
}
```


----------



## Nisbo (9. Mrz 2017)

Evtl noch als Info an andere welche auch über der Suchfunktion hier landen und für die Serialisierung auch neu ist

* implements Serializable*
muss noch in die Eigene Klasse rein, in dem Beispiel  hier die Klasse Eintrag


----------

