Objekt speichern und laden

Diskutiere Objekt speichern und laden im Allgemeine Java-Themen Bereich.
H

Hieu

Hallo Leute ich würde gerne eine Instanz von dieser Klasser speichern und dann dann laden
Code:
package Klassen;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * Klasse für die Erstellung einer Firma.
 * @author Hieu Trung Vu.
 *
 *
 */
 public class Autovermietung implements Serializable {
    
    
    
    /**
     *  Attribute von den erstellten Firmen, wie z.B. der Name, die Adresse, die Privat - und Geschaeftskunden.
     */
    
    private String name;
    private Adresse adresseautovermietung;
    private ArrayList<Privatkunde> privatkunden;
    private ArrayList<Autos> autos;
    private ArrayList<Geschäftskunde> geschäftskunden;
    private ArrayList<ArrayList<Rechnung<Privatkunde>>> privatkundenrechnungen;
    private ArrayList<ArrayList<Rechnung<Geschäftskunde>>> geschäftskundenrechnungen;
    private HashMap <String, Rechnung<Geschäftskunde>> hashmapgerechnungen;
    private HashMap <String, Rechnung<Privatkunde>> hashmapprivrechnungen;
    private ArrayList<Adresse> adressen;
    /**
     *
     *  Objektzaehler.
     */
    public static int anzahlautovermietung = 0;

    
    /**
     * Konstruktor: Sobald Objekt erstellt wurde, wird Objektzaehler um 1 erhöht.
     */
    
    public Autovermietung() {
        //Zaehler erhoehen
        anzahlautovermietung++;
        }
    
    //Setter                       

    /**
     *
     * @param value der Name für das erstellte Objekt.
     */
public void setname(String value) {
    name = value;

                                   }
/**
 *
 * @param value Die Adresse von der erstellten Firma setzen.
 */
public void setadresseautovermietung(Adresse value) {
    adresseautovermietung = value;
}



/**
 *
 * @param value setzt die Autos der Firma fest.
 */
public void setautos(ArrayList<Autos> value) {
    autos = value;
}


    //Getter
/**
 *
 * @return gibt den Namen der Firma zurueck.
 */
public String getname() {
    return name;
}
/**
 *
 * @return gibt die Adresse der Firma zurueck.
 */
public Adresse getadresseautovermietung() {
return adresseautovermietung;
}


/**
 *
 * @return gibt alle Autos der Firma zurück.
 */
public ArrayList<Autos> getautos() {
    return autos;
}

/**
 *
 * @return gibt alle Privatkunden zurueck.
 */
public ArrayList<Privatkunde> getPrivatkunden() {
    return privatkunden;
}

/**
 *
 * @param privatkunden setzt die Privatkunden fest.
 */
public void setPrivatkunden(ArrayList<Privatkunde> privatkunden) {
    this.privatkunden = privatkunden;
}
/**
 *
 * @return gibt Geschäftskunden zurueck.
 */
public ArrayList<Geschäftskunde> getGeschäftskunden() {
    return geschäftskunden;
}

/**
 *
 * @param geschäftskunden setzt Geschäftskunden fest.
 */
public void setGeschäftskunden(ArrayList<Geschäftskunde> geschäftskunden) {
    this.geschäftskunden = geschäftskunden;
}

public ArrayList<ArrayList<Rechnung<Privatkunde>>> getPrivatkundenrechnungen() {
    return privatkundenrechnungen;
}

public void setPrivatkundenrechnungen(ArrayList<ArrayList<Rechnung<Privatkunde>>> privatkundenrechnungen) {
    this.privatkundenrechnungen = privatkundenrechnungen;
}

public ArrayList<ArrayList<Rechnung<Geschäftskunde>>> getGeschäftskundenrechnungen() {
    return geschäftskundenrechnungen;
}

public void setGeschäftskundenrechnungen(ArrayList<ArrayList<Rechnung<Geschäftskunde>>> geschäftskundenrechnungen) {
    this.geschäftskundenrechnungen = geschäftskundenrechnungen;
}

public HashMap <String, Rechnung<Geschäftskunde>> getHashmapgerechnungen() {
    return hashmapgerechnungen;
}

public void setHashmapgerechnungen(HashMap <String, Rechnung<Geschäftskunde>> hashmapgerechnungen) {
    this.hashmapgerechnungen = hashmapgerechnungen;
}

public HashMap <String, Rechnung<Privatkunde>> getHashmapprivrechnungen() {
    return hashmapprivrechnungen;
}

public void setHashmapprivrechnungen(HashMap <String, Rechnung<Privatkunde>> hashmapprivrechnungen) {
    this.hashmapprivrechnungen = hashmapprivrechnungen;
}

public ArrayList<Adresse> getAdressen() {
    return adressen;
}

public void setAdressen(ArrayList<Adresse> adressen) {
    this.adressen = adressen;
}


                                
}
dazu habe ich diese Methoden geschrieben
Code:
private static void vermietungsdatenladen() {
        ObjectInputStream ois = null;
        FileInputStream fis = null;
        try {
          fis = new FileInputStream("Daten/objekte.ser");
          ois = new ObjectInputStream(fis);
          Object obj = ois.readObject();
          if (obj instanceof Autovermietung) {
            Autovermietung so = (Autovermietung)obj;
          
          }
        }
        catch (IOException e) {
          e.printStackTrace();
        }
        catch (ClassNotFoundException e) {
          e.printStackTrace();
        }
        finally {
          if (ois != null) try { ois.close(); } catch (IOException e) {}
          if (fis != null) try { fis.close(); } catch (IOException e) {}
        }
    
    
        
    }


    private static void vermietungsdatenspeichern() {
        File folder1 = new File("Daten");
        
        
        if(folder1.exists()) {
            System.out.println("Ordner existiert bereits");
        }else {
            folder1.mkdirs();
            System.out.println("Ordner wurde neu erstellt");
        }
        
        
        ObjectOutputStream oos = null;
        try {
        oos = new ObjectOutputStream(new FileOutputStream("Daten/objekte.ser"));
        oos.writeObject(Projekt.firmen[0]);
        }
        catch (IOException e) {
        } finally {
        if (oos != null) try {oos.close();} catch (Exception exc) {}}
    }
Code:
das speichern scheint zu funzen aber wenn ich das Objekt laden möchte und ein Attribut der Instanz ausgeben möchte, kommt diese Fehlermeldung
Code:
Auto wurde zugewiesen
Auto wurde zugewiesen
Auto wurde zugewiesen

 (1) Privatkunde anlegen
 (2) Geschäftskunde anlegen
 (3) Auto anlegen
 (4) Kunde mietet ein Auto
 (5) Kunde mit evtl. gemietetem Auto anzeigen (Auswahl durch Kundennummer
 (6) alle unvermieteten Autos anzeigen
 (7) Auto evtl. mit aktuellem Mieter anzeigen
 (8) Auto abgeben und passende Rechnung erstellen
 (9) Rechnung anzeigen
(10) Alle Rechnungen anzeigen
(11) Vermietungsdaten speichern
(12) Vermietungsdaten laden
(13) Kunden nach Namen sortiert als CSV-Datei exportieren
(14) Beenden
12
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: Klassen.Adresse
    at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1653)
    at java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2410)
    at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2304)
    at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2142)
    at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1646)
    at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:464)
    at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
    at mal/Methoden.methods.vermietungsdatenladen(methods.java:198)
    at mal/Methoden.methods.auswahl(methods.java:169)
    at mal/Methoden.methods.menue(methods.java:133)
    at mal/Klassen.Projekt.main(Projekt.java:182)
Caused by: java.io.NotSerializableException: Klassen.Adresse
    at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1185)
    at java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1553)
    at java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1510)
    at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)
    at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1179)
    at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349)
    at mal/Methoden.methods.vermietungsdatenspeichern(methods.java:235)
    at mal/Methoden.methods.auswahl(methods.java:167)
    ... 2 more
es scheint etwas mit dieser Klasse
Code:
package Klassen;

import java.io.Serializable;

/**
 * Klasse für die Erstellung einer Adresse.
 * @author Hieu Trung Vu.
 *
 */
public class Adresse implements Serializable {
    
    //attribute
    /**
     * Attribute der Klasse Adresse : Adresszeile 1, Adresszeile 2, Postleitzahl und Ort.
     */
    private String adresszeile1;
    private String adresszeile2;
    private String postleitzahl;
    private String ort;
    
    /**
     * Objektzaehler.
     */
    public static int anzahladressen = 0;
    
    //Konstruktor
    /**
     * Konstruktor bei dem bei der Erstellung einer Adresse alle Attribute festgelegt werden.
     * @param a1 Adresszeile 1.
     * @param a2 Adresszeile 2.
     * @param pz Posteleitzahl.
     * @param o Ort.
     */
    
    public Adresse(String a1, String a2,String pz, String o) {
        adresszeile1 = a1;
        adresszeile2= a2;
        postleitzahl = pz;
        ort = o;
        anzahladressen++;
                                                          }
    
    //getter
    /**
     *
     * @return gibt Adresszeile 1 zurueck.
     */
    public String getadresszeile1() {
        return adresszeile1;
    }
    /**
     *
     * @return gibt Adresszeile 2 zurueck.
     */
    public String getadresszeile2() {
        return adresszeile2;
    }
    /**
     *
     * @return gibt die Postleitzahl zurueck.
     */
    public String getpostleitzahl() {
        return postleitzahl;
    }
    /**
     *
     * @return gibt den Ort zurueck.
     */
    public String getort() {
        return ort;
    }
    
    /**
     * Gibt alle Adressen aus (Testzweck).
     */
    public void alleadressenausgeben() {
        for (int i = 0;i< anzahladressen;i++) {
            System.out.println(Projekt.adressen.get(i).adresszeile1 + " " + Projekt.adressen.get(i).adresszeile2 + " " + Projekt.adressen.get(i).ort + " " + Projekt.adressen.get(i).postleitzahl);
        }
    }
}
zutun zu haben ich hab nur leider keine Idee wie ich das beheben könnte. Wäre mega schön wenn mir jemand helfen könnte.
 
mihe7

mihe7

das speichern scheint zu funzen
Ah, ja:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: Klassen.Adresse
...
Caused by: java.io.NotSerializableException: Klassen.Adresse
...
at mal/Methoden.methods.vermietungsdatenspeichern(methods.java:235)
:)

Wobei ich jetzt ad hoc nicht sehe, was an Adresse nicht serialisierbar sein sollte. Lösch mal die objekte.ser, bau das Projekt neu und probier es nochmal.
 
Thema: 

Objekt speichern und laden

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben