# ArrayList in Datei schreiben



## petterapamm (29. Jul 2010)

Hallo!

Ich möchte eine ArrayList in eine Datei speichern und wieder auslesen.
Eigentlich weiß ich wie man Daten und Objekte per Data- bzw. Objectout/inputstream handhabt.
Doch dies funktioniert irgendwie nicht:

Methode zum speichern in der Klasse SpeichernLaden:

```
public void speichern(ArrayList<Benutzer> benutzer) {
        try{
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("daten.ncr"));
            
            System.out.println("Fehler beim Speichern1");
            oos.writeObject((ArrayList<Benutzer>) benutzer);
            System.out.println("Fehler beim Speichern2");
            oos.flush();
            oos.close();
        }
        catch(Exception e){
            System.out.println("Fehler beim Speichern");
        }
    }
```
"Fehler beim Speichern1" wird noch ausgegeben, dann tritt ein Fehler auf und "Fehler beim Speichern" wird ausgegeben.

Die ArrayList wird aus der Klasse BenutzerVerwaltung übergeben, die Benutzer (also Objekte der Klasse Benutzer) verwaltet. In der ArrayList befinden sich also einzelne Objekte der Klasse Benutzer.

Benutzerverwaltung:

```
import java.util.ArrayList;
import java.util.Iterator;

public class BenutzerVerwaltung
{
    private ArrayList<Benutzer> benutzer;
    private Controller controller;
    
    public BenutzerVerwaltung(Controller cntrlr){
        controller = cntrlr;
        benutzer = new ArrayList<Benutzer>();
    }
    
    public void neuerBenutzer(String name){
        benutzer.add(new Benutzer(name));
    }
        
    public void laden(ArrayList geladeneBenutzerListe){
        benutzer = geladeneBenutzerListe;
    }
    
    public ArrayList<Benutzer> gibBenutzer(){
        return benutzer;
    }
    
}
```

Im Controller wird, wenn gespeichert, also die Datei geschrieben werden soll, folgende Methode aufgerufen:

```
public void speichern(){
        speichernLaden.speichern(benutzerVerwaltung.gibBenutzer());
    }
```

Ich weiß aber (Dank des BlueJ Debuggers), dass eigentlich alles bis "oos.writeObject..." funktioniert, da die ArrayList benutzer an dieser Stelle vollständig existiert.
Folglich habe ich keine wirkliche Ahnung, wo der Fehler liegt. (Wahrscheinlich ein einfacher Syntaxfehler)

Danke schon mal im Vorraus für eure Hilfe, mfG
Petter


----------



## Gast2 (29. Jul 2010)

Lass dir doch erstmal die Exception ausgeben, die wird dir dann schon sagen wo es dran liegt :rtfm:


----------



## eRaaaa (29. Jul 2010)

Benutzer ist mit 
	
	
	
	





```
Serializable
```
 ausgestattet? Ansonsten, lasse dir doch mal eine richtige Fehlermeldung ausgeben anstelle deiner eigenen! Dann weisste auch wo der Fehler zu suchen ist 


```
catch(Exception e){
            System.out.println("Fehler beim Speichern");
        }
```

-->


```
catch(IOException e){
            e.printStackTrace();
        }
```

ansonstne hier nochmal den Stacktrace posten wenn dir der nicht selbst weiterhilft !


----------



## petterapamm (29. Jul 2010)

Also die Fehlermeldung ist jetzt: "java.io.NotSerializableException: Benutzer". Somit ist das schon mal geklärt.
Problem jetzt: was ist Serializable und wie macht man das?:bahnhof:


----------



## eRaaaa (29. Jul 2010)

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14.12 Persistente Objekte und Serialisierung

Da fehlt wohl ein 
	
	
	
	





```
implements Serializable
```
an deine(n)(r) Klasse(n)


----------



## petterapamm (29. Jul 2010)

Gut, bis jetzt funktionierts, vllt kommt in ein paar Minuten die nächste Frage aber trotzdem schonmal vielen Dank für die Hilfe bis hier


----------

