Serialisierung von Objekten

Status
Nicht offen für weitere Antworten.

ryoshi

Mitglied
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:
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:
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
 
S

SlaterB

Gast
> aber es ist nirgends eine Datei Adressbuch.dat zu finden.

das muss für dich das Zeichen sein, dass das Thema Serialisierung erstmal gestorben ist,
in einer solchen Situation solltest du nur einen Gedanken haben: wie speichert man eine Datei?
völlig egal wozu du Dateinen erzeugen wolltest, dass es überhaupt geht mit Testinhalt, das musst du zunächst versuche

also ein fs.close() fehlt vielleicht,
bist du sicher, dass die Datei nicht existiert?, woher weißt du überhaupt, in welchem Verzeichnis wird sie erstellt?

mach mal eine Ausgabe:
System.out.println(new File("Adressbuch.dat").getAbsolutePath());

und vor allem:
versuche doch bitte erstmal einfache Beispiele aus Lehrbüchern,
http://www.galileocomputing.de/open...12_003.htm#mjb0761d0e5d87216c7da94eccb4ec6623

funktioniert
Listing 12.13 com/javatutor/insel/io/stream/FileWriterDemo.java, main()
bei dir?
 

ryoshi

Mitglied
Also zunächst einmal: Ich ziehe immer Lehrbücher als erstes in Erwägung wenn ich ein Problem habe und versuche mir mit der Hilfe das Thema zu erarbeiten und du kannst nicht behaupten das ich keine Vorarbeit geleistet habe.

Um zum eigentlichen Thema zurück zu kommen, habe ich ja nicht gleich direkt versucht die Serialisierung in mein Projekt einzubaun, sondern bin einige Beispiel durchgegangen, die wirklich 100% geklappt haben. Wenn eine Datei "test1.ser" nicht vorhanden war dann hat der FileOutputStream sie halt angelegt.
Und wenn ich sie gelöscht habe, dann hat er sie beim nächsten Durchlauf wieder angelegt. Mit meinen Testobjekten ging das wunderbar. Nur war dort halt nirgends das Wort 'static' im Spiel. In den Lehrbüchern steht das statische Membervariablen nicht mit serialisiert werden. Die Referent adressbuch vom Objekt Adressbuch ist ja nur ein Attribut auf sich selbst um zu verhindern, dass mehrere Objekte vom Typ Adressbuch erstellt werden. Ich brauche halt in fast jeder meiner bisher 35 Klassen Zugriff auf dieses Adressbuch. So geht es am einfachsten.

Das fs.close() hatte ich bisher drin, nur hab ich es wieder rausgelöscht, weil es in einem meiner Lehrbücher auch nicht drin stand. Es geht aber auch mit der Anweisung nicht. Das Zielverzeichnis gebe ich ja im FileOutputStream an. Wenn sie also nicht dort liegt, wurde sie logischerweise auch nicht erstellt. Ich habe das auf Windows & Linuxplatform getestet. Meine Testprojekte & mein Hauptprojekt.

Was ich nicht verstehe ist halt, warum er nicht in den catch-Zweig geht, wenn er doch einen Fehler hat.

Gruß
ryoshi
 
S

SlaterB

Gast
lieber irre ich mich 10x bei jemanden der schon Vorarbeit gemacht hat, als auch nur einmal diesen wichtigen Hinweis auszulassen,
ist also vom Prinzip her nicht persönlich gemeint

deine Erzählungen von static oder nicht treiben allerdings wieder ab,
ich kann mir gut vorstellen dass da irgendwas besonders ist,
darüber nur nachzudenken ist aber nicht konstruktiv,

dazu gibts (notgedrungen ;) ) wieder nur einen Hinweis:
fange mit Hello World an:

Code:
 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();
ist unnötig kompliziert, schreibe
Code:
 FileOutputStream fs = new FileOutputStream("Adressbuch.dat");
        ObjectOutputStream os = new ObjectOutputStream(fs);
        os.writeInt(1);
        os.close();
geht das oder nicht?
-> hat nix mit Serialisierung zu tun
 

ryoshi

Mitglied
Ja ich habe mich vor der Serialisierung mit der normalen Dateiverarbeitung in Java beschäftigt und das Beispiel unten geht selbstverständlich.

Genau wie bei mir folgendes Beispiel ohne Probleme läuft:
Code:
import java.io.*;

public class Initialiserer
{
	private static Person[] kontakte = new Person[10];
	private static int anzahl = 0;
	
	public static void add(Person k)
	{
		if (anzahl < kontakte.length)
			kontakte[anzahl++] = k;
	}
	
	public static void init()
	{
		try
		{
			FileInputStream fs = new FileInputStream("personen.adr");
			ObjectInputStream is = new ObjectInputStream(fs);
			Person dummy;
			while ((dummy = (Person) is.readObject()) != null)
			{
				add(dummy);
			}
		} catch (ClassNotFoundException e)
		{
			System.err.println(e.toString());
		} catch (IOException e)
		{
			System.err.println(e.toString());
		}
	}
	
	public static void end(Person[] kontakte)
	{
		try
		{
			FileOutputStream fs = new FileOutputStream("personen.adr");
			ObjectOutputStream os = new ObjectOutputStream(fs);
			for (int i = 0; i < kontakte.length; i++)
				os.writeObject(kontakte[i]);
			os.close();
		} catch (IOException e) 
		{
			System.err.println(e.toString());
		}
	}
	
	public static void main(String[] args)
	{
		Person[] test = new Person[10];
		for (int i = 0; i < test.length; i++)
			test[i] = new Person(i, "Test", "TestUser");
		end(test);
		init();
		
		for (int i = 0; i < kontakte.length; i++)
			System.out.println(kontakte[i].toString());
	}
}

Code:
import java.io.*;

public class Person implements Serializable
{
	private static final long serialVersionUID = -5139506557181868901L;
	private int nummer;
	private String vorname;
	private String nachname;
	
	public Person(int nummer, String vorname, String nachname)
	{
		this.nummer = nummer;
		this.vorname = vorname;
		this.nachname = nachname;
	}
	
	public String toString()
	{
		return Integer.toString(nummer) + ":" + vorname + ":" + nachname;
	}
}

Dieses Beispiel habe ich mit den Infos aus 2 Lehrbüchern gecoded und funktioniert einwandfrei bei mir. Die Datei "personen.adr" wird bei Nichtvorhanden einfach vom System angelegt.

Gruß
ryoshi
 
S

SlaterB

Gast
schön schön, und nun Schritt für Schritt alle deine weiteren Ausgaben einfügen,
bist du zumindest die Zeile findest, aber der es nicht mehr klappt,
das wäre dann eine wertvolle Info

sichlich liegt es ja an den Gruppen, die einzig komplizierte Ausgabe,
da musst du dann leider diese Klasse vereinfachen,
mit
Code:
public class Gruppe implements Serializable {

}
anfangen und nach und nach alle Attribute einfügen, bis es zu dem Fehlverhalten kommt,
nicht schick, aber ein Vorgehen was letztlich zum Ziel oder zumindest zu neuen Informationen über das Problem führt
 

ryoshi

Mitglied
Nur das Gruppe, die in Adressbuch eine List darstellt, wiederrum ein List Attribut mit allen Kontakten hat ;)
Vielleicht wird es ja mit der Methode was, aber das muss ich mal in Ruhe testen.
Ergebnis kommt natürlich wie immer rein.

Wenn jemand weiß ob evtl die ArrayList etwas besonderes für den Serialisierungsprozess darstellt, bitte ich um Rückmeldung. Serialisierbar ist sie definitv, dass habe ich in der API nachgeschaut und steht auch in der Java-Insel.

Gruß
ryoshi
 

ryoshi

Mitglied
Das ganze hat sich nun erledigt!

SlaterB, ich muss mich vielmals bei dir entschuldigen. Das ganze hat von Anfang an geklappt, nur wurde die Datei einfach nicht in das Verzeichnis geschrieben wo ich sie erwartet hatte. Durch meinen ganzen Package kram hat sich das System einen von mir unerwarteten Speicherort ausgesucht.

Schließlich hat die Suche mir geholfen und meine Datei gefunden.

Danke für deine Tipps!

Gruß
ryoshi
 
S

SlaterB

Gast
oder wie gesagt auch
System.out.println(new File("Adressbuch.dat").getAbsolutePath());

dürfte dir den Ort verraten ;)
 

ryoshi

Mitglied
Manchmal ist man einfach blind...

Fühle mich grad irgendwie auch bissl beschämend dafür das ich Java schon so lange mache und sogar noch Softwareentwicklung studiere ;)

Naja nun ist man schlauer.

Gruß
ryoshi
 

Leroy42

Top Contributor
ryoshi hat gesagt.:
hat sich das System einen von mir unerwarteten Speicherort ausgesucht.
:shock: Also wirklich! Diese neumodischen OOP-Sprachen werden immer eigenmächtiger! :x

Wenn wir denen nicht mal zeigen, wer die Hosen anhat,
wird das nochmal bös' enden! :meld:
 

ryoshi

Mitglied
Leroy, ich hab halt nen Fehler gemacht :p
Aber die Ironie gefällt mir ;)

Computer werden nochmal die Welt erobern ^^
 

Leroy42

Top Contributor
ryoshi hat gesagt.:
Aber die Ironie gefällt mir ;)

Computer werden nochmal die Welt erobern ^^

:shock: Welche Ironie denn?

(
computer_smilies25.gif
( :cool: ))
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Serialisierung: Laden von Objekten - Risiken? Java Basics - Anfänger-Themen 4
D Problem mit der Serialisierung Java Basics - Anfänger-Themen 31
M Serialisierung in Java Java Basics - Anfänger-Themen 10
C Java Applet Fragen: Serialisierung, Excel import Java Basics - Anfänger-Themen 2
I Input/Output Alternative zur Serialisierung/ ImageJ Objecte Java Basics - Anfänger-Themen 7
W Nullpointer bei Objekt Serialisierung mit ArrayList<byte[]> etc. Java Basics - Anfänger-Themen 2
V Java Serialisierung Java Basics - Anfänger-Themen 2
O Objekt Listen serialisierung und deserialisieren Java Basics - Anfänger-Themen 5
U Serialisierung Probleme bei Umsetzung Java Basics - Anfänger-Themen 26
V Serialisierung Umbennung einer Klasse Java Basics - Anfänger-Themen 2
G Input/Output Serialisierung oder Datenbank Java Basics - Anfänger-Themen 6
K Input/Output Serialisierung Java Basics - Anfänger-Themen 7
P Serialisierung - Objekte vergleichen Java Basics - Anfänger-Themen 4
J Input/Output Serialisierung Java Basics - Anfänger-Themen 6
K Serialisierung: speichern und auslesen, auslesen klappt nicht Java Basics - Anfänger-Themen 14
B Std-Serialisierung - Speichern/Laden geht nur auf einem Rechner Java Basics - Anfänger-Themen 17
W Problem mit Serialisierung von jTable Java Basics - Anfänger-Themen 15
E Serialisierung - Exception? Java Basics - Anfänger-Themen 21
T Collections (De)-Serialisierung meines HashSets Java Basics - Anfänger-Themen 3
J Input/Output Serialisierung Java Basics - Anfänger-Themen 6
W Problem mit Serialisierung und TableModel Java Basics - Anfänger-Themen 3
F Sonderzeichen bei XML Serialisierung nicht konvertieren Java Basics - Anfänger-Themen 7
O Serialisierung: Object abspeichern und aufrufen Java Basics - Anfänger-Themen 6
L Java Serialisierung Singleton Java Basics - Anfänger-Themen 6
Luk10 Serialisierung bei schon vorhandener Datei Java Basics - Anfänger-Themen 15
I Serialisierung ClassNotFound Java Basics - Anfänger-Themen 8
S serialisierung Java Basics - Anfänger-Themen 3
E Alternativen zur binären Serialisierung ? Java Basics - Anfänger-Themen 9
J Serialisierung - Array-Objekt serialisieren/deserialisieren Java Basics - Anfänger-Themen 6
G Frage zu Serialisierung Java Basics - Anfänger-Themen 4
M Serialisierung erstes Beispiel Java Basics - Anfänger-Themen 4
A Per Serialisierung speichern Java Basics - Anfänger-Themen 2
DStrohma Problem mit Serialisierung Java Basics - Anfänger-Themen 3
T Threads und Serialisierung Java Basics - Anfänger-Themen 4
Z Serialisierung vs. Sicherheit Java Basics - Anfänger-Themen 2
S Serialisierung Java Basics - Anfänger-Themen 8
G Objekt Serialisierung Java Basics - Anfänger-Themen 3
P Serializable - Serialisierung Java Basics - Anfänger-Themen 5
P Collection Vector speichern mittels Serialisierung? Java Basics - Anfänger-Themen 2
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
T Kollision von 2 Objekten Java Basics - Anfänger-Themen 2
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
B Reflection ändern von Objekten in Objekten Java Basics - Anfänger-Themen 12
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
N Vererbung Queue bestehend aus Superclass- und Subclass-Objekten Java Basics - Anfänger-Themen 7
B Compiler-Fehler Array aus Objekten übergeben Java Basics - Anfänger-Themen 7
YAZZ Schlüsselworte Töten von Objekten Gameover Java Basics - Anfänger-Themen 2
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
districon Vergleichen von Objekten Java Basics - Anfänger-Themen 20
Zeppi OOP Array in Objekten Java Basics - Anfänger-Themen 4
LetsSebi Methode, die einen arry von objekten speichert in einer datei Java Basics - Anfänger-Themen 6
JavaNoobi Try and Catch und übergabe von Objekten Java Basics - Anfänger-Themen 2
A Klasse Menge mit Objekten der Klasse Person Java Basics - Anfänger-Themen 8
S Auf Array aus Objekten zugreifen? Java Basics - Anfänger-Themen 1
D Mit Objekten rechnen, Textfield, JavaFX, Noob Java Basics - Anfänger-Themen 8
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
N Klassen Rekursion mit Feldern von Objekten Java Basics - Anfänger-Themen 14
D Operatoren Mit Objekten rechnen Java Basics - Anfänger-Themen 7
E Datentypen Einfügen von Objekten in eine Map Java Basics - Anfänger-Themen 2
S Pane nach speziellen Child Objekten durchsuchen Java Basics - Anfänger-Themen 3
B ID von unterschiedlichen Objekten bekommen? Java Basics - Anfänger-Themen 2
T Daten von Objekten speichern Java Basics - Anfänger-Themen 7
PaperHat Programmieraufgabe - Objekte in Objekten Java Basics - Anfänger-Themen 2
L Rechnen mit Objekten Java Basics - Anfänger-Themen 3
S werte von objekten in schleife verändern Java Basics - Anfänger-Themen 14
D Zusammenarbeit von Objekten Java Basics - Anfänger-Themen 1
Y Begrenzte Anzahl an Objekten? Java Basics - Anfänger-Themen 12
Kornblume Nulltyp eines Arrays von Objekten? Java Basics - Anfänger-Themen 10
A Frage zur Aufgabe Uhrzeit einstellen mit Objekten Java Basics - Anfänger-Themen 18
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
G Klassen Call by Value auch bei Objekten? Java Basics - Anfänger-Themen 2
R Verständnisfrage zu Objekten u. Übergabeparameter Java Basics - Anfänger-Themen 8
arjoopy Kapselung Übergabe von Objekten aus ArrayList Java Basics - Anfänger-Themen 4
schoenosrockos Unterschied zwischen Objekten und vererbungen Java Basics - Anfänger-Themen 1
M Speichern von Objekten - Verfügbarkeit bei erneutem Aufruf Java Basics - Anfänger-Themen 3
R Methoden Methode ruft Methode auf, ruft Methode auf (mit Objekten) Java Basics - Anfänger-Themen 4
Shizmo PriorityQueue mit Objekten Java Basics - Anfänger-Themen 10
E Instanzieren von Objekten verkürzen Java Basics - Anfänger-Themen 1
F Interaktion von Objekten verschiedener Klassen... Java Basics - Anfänger-Themen 13
D Effiziente Verwaltung der Objekten und Unterobjekten Java Basics - Anfänger-Themen 18
N Dauer zwischen zwei LocalDateTime Objekten berechnen? Java Basics - Anfänger-Themen 4
L Subklasse von ArrayList nur mit bestimmten Objekten füllen Java Basics - Anfänger-Themen 1
E Erste Schritte Gute Erklärung zu Objekten / Klassen / Methoden / Sichtbarkeiten auf Deutsch Java Basics - Anfänger-Themen 3
S Problem mit augabe von Objekten Java Basics - Anfänger-Themen 3
T Junit Mockito: Instanz von inneren erzeugten Objekten Java Basics - Anfänger-Themen 4
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
W Was passiert mit Objekten die nicht in Objektvariablen initialisiert werden ? Java Basics - Anfänger-Themen 3
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
S Liste mit Objekten und Listen Java Basics - Anfänger-Themen 9
Y Gleiche Arrays aus einem Array mit Objekten Java Basics - Anfänger-Themen 5
K Min eines Arrays mit Objekten Java Basics - Anfänger-Themen 6
M Array mit Objekten lässt sich nicht auslesen Java Basics - Anfänger-Themen 10
T Statische Arrays von Objekten Java Basics - Anfänger-Themen 2
J Methoden Einfügen von Objekten nach Alphabet in ArrayList funktioniert nicht Java Basics - Anfänger-Themen 2
B Erste Schritte Anzeige von Graphics Objekten einzeln aktualisieren Java Basics - Anfänger-Themen 1
TheSorm Koordinaten von gedrehten Objekten Java Basics - Anfänger-Themen 4
D Bestimmte Werte von Objekten aus einer ArrayList in eine andere ArrayList kopieren Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben