Serialisierung von Objekten

ryoshi

Grünschnabel
Da man ja auch mal gerne Daten behalten möchte um sie nicht immer neu eingeben zu müssen habe ich mich mal in die Serialisierung eingelesen. Das hat in einigen Tests aus super geklappt und verlief wie ich das erhofft habe.

Jetzt wollt ich das mal auf mein größeres Projekt umsetzen und hier klappt das nicht mehr.
Zunächst habe ich versuch ein statisches Objekt zu serialisieren, was wohl mit writeObject() aus dem ObjectOutputStream nicht möglich ist.
Es handelt sich um ein Adressbuchobjekt:
Java:
public class Adressbuch implements Serializable
{
    private static final long serialVersionUID = 8595141956446128592L;
    private static Adressbuch adressbuch = new Adressbuch();
    private List<Gruppe> gruppen;
    private int kontakt_zaehler;
    private int gruppen_zaehler;

    Konstruktor & Methoden
}

Also das Serialisieren von 'adressbuch' klappt nicht und so habe ich mir überlegt die Gruppenliste & die beiden Integer zu serialisieren und sie schließlich dem 'adressbuch' beim Deserialisieren wieder zurückzugeben.

Der Serialisierungscode sieht nun folgendermaßen aus:
Java:
public static boolean abspeichern()
{
    try
    {
        FileOutputStream fs = new FileOutputStream("Adressbuch.dat");
        ObjectOutputStream os = new ObjectOutputStream(fs);
        os.writeInt(Adressbuch.gibAdressbuch().gibGruppenZaehler());
        os.writeInt(Adressbuch.gibAdressbuch().gibKontaktZaehler());
        List gruppen = Adressbuch.gibAdressbuch().gibGruppenListe();
        for(int i = 0; i < gruppen.size(); i++)
            os.writeObject(gruppen.get(i));
        os.close();
    }
    catch(IOException ausnahme)
    {
        System.err.println("IOException");
        return false;
    }
	
    return true;
}
	
public static boolean wiederherstellen()
{
    String pfad = "Adressbuch.dat";
    if(Dateiverwaltung.istVorhanden(pfad) && Dateiverwaltung.istLesUndSchreibbar(pfad))
    {
        try
        {
            FileInputStream fs = new FileInputStream(pfad);
            ObjectInputStream os = new ObjectInputStream(fs);
            Adressbuch.gibAdressbuch().setzeGruppenZaehler(os.readInt());
            Adressbuch.gibAdressbuch().setzeKontaktZaehler(os.readInt());
            Gruppe gruppe;
            while((gruppe = (Gruppe) os.readObject()) != null)
            {
                Adressbuch.gibAdressbuch().hinzufuegenGruppe(gruppe);
            }
        }
        catch (IOException ausnahme)
        {
            return false;
        } 
        catch (ClassNotFoundException ausnahme)
        {
            return false;
        }
			
        return true;
    }
    else
        return false;
}

Alle Klassen die etwas mit der Serialisierung zu tun haben impelemtieren Serializable aus java.io.
Wenn ich jetzt die Methode abspeichern() aufrufe gibt er mir true zurück (was ja bedeutet das er in keinem catch-Zweig war), aber es ist nirgends eine Datei Adressbuch.dat zu finden.

Wäre sehr dankbar wenn mir jemand auf die Sprünge helfen könnte oder evtl. eine annehmbare Alternative weiß.

Danke & Gruß
ryoshi
 
Zuletzt bearbeitet:
Warum klappt das Serialisieren von Adressbuch nicht? Fehlermeldung?

Obwohl ich es mir denken kann ... "private static Adressbuch adressbuch = new Adressbuch();" -> Ein Adressbuch enthält ein Adressbuch, das ein Adressbuch enthält, welches ein Adressbuch enthält, .... ist zwar statisch, aber ich denke das wird trotzdem immer neu initialisiert. Am besten mal als transient markieren oder so ...

Ansonsten würde ich dir empfehlen erstmal mit absoluten Pfaden zu arbeiten. Dann weißt du, wo du deine Adressbuch.dat suchen musst ... Wenn sie wirklich nicht geschrieben wird, häng noch ein os.flush() vor das os.close().
 
Habe heute morgen mal eine Suchmaschine an mein System gelassen und siehe da, es hat meine Datei gefunden.

Sehr komisch, weil der Speicherort nicht der von mir erwartete war.
Egal, die Sache ist somit geklärt.
Kubalac, danke trotzdem für deine Hilfe.

Gruß ryoshi
 
Zurück