tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
294
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ryoshi ryoshi ist offline Rookie
    Registriert seit
    Jun 2007
    Beiträge
    7
    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:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    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:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    
    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
    Geändert von ryoshi (02.07.07 um 20:33 Uhr)
     

  2. #2
    Kulabac Kulabac ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    181
    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().
     

  3. #3
    ryoshi ryoshi ist offline Rookie
    Registriert seit
    Jun 2007
    Beiträge
    7
    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
     

Ähnliche Themen

  1. Serialisierung
    Von athlord im Forum Java
    Antworten: 6
    Letzter Beitrag: 18.12.10, 14:17
  2. Serialisierung
    Von Steve222 im Forum Java Grundlagen
    Antworten: 3
    Letzter Beitrag: 21.09.10, 18:26
  3. XML - Serialisierung
    Von Apprauuuu im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 19.07.08, 17:13
  4. Serialisierung von Draw2D Objekten?
    Von fmacloud im Forum Java
    Antworten: 4
    Letzter Beitrag: 05.07.07, 12:09
  5. Serialisierung von Objekten in einer Liste
    Von steffi1985 im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 16.06.05, 22:21