ObjectOutputStream

Neue Frage »

Auf diesen Beitrag antworten »
Tina92 ObjectOutputStream

Meine Frage:
Hallo,

ich möchte gerne ein kleines Tool schreiben, wo ein Eintrag mit Name und Geburstag (beides als String) angelegt werden kann.

Hier mein Code:

code:
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:
package geburtstagstool;

import java.io.*;

public class GeburtstagsTool
{
    public static void main (String[]args) throws Exception
    {
        Eintrag eintrag = new Eintrag ("Miller","000000");
        Eintrag eintrag1 = new Eintrag ("Hansen","4444");
        eintrag.testSchreiben(eintrag);
        System.out.println(Eintrag.testLesen().name);
    }
}

class Eintrag implements Serializable
{
    Eintrag [] eintrag = new Eintrag [50];
    public String name;
    public String gebDatum;
    int i=0;
    
    public Eintrag (String name, String gebDatum)
    {
        this.name = name;
        this.gebDatum = gebDatum; 
    }         

    public void testSchreiben (Eintrag eintrag) throws Exception
    {
        ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream ("eintrag.dat"));
        oos.writeObject(eintrag);
        oos.close();
    }
    
    public static Eintrag testLesen() throws IOException, ClassNotFoundException
    {
        ObjectInputStream ois = new ObjectInputStream (new FileInputStream ("eintrag.dat"));
        Eintrag eint = (Eintrag) ois.readObject();
        ois.close();
        return eint; 
    }
}







Meine Ideen:
So wie mein Programm momentan geschrieben ist, bekomme ich nur den ersten Namen ausgegeben und weiß auch nicht wirklich, ob das alles so richtig funktioniert.

Habe auch ein Eintrag[] - Array angelegt, nur wie funktioniert das eigentlich mit dem ObjectInputStream wenn ich ihn wieder einlese?

Vielen Dank.
 
Auf diesen Beitrag antworten »
eulerscheZahl

code:
1:
2:
Eintrag eintrag = new Eintrag ("Miller","000000");
Eintrag eintrag1 = new Eintrag ("Hansen","4444");

so weiß aber der eine Eintrag nichts vom anderen.
Entferne aus der Eintrag Klasse das Array. Dann hast du entweder in der main eines erstellen und das komplette Array serialisieren, oder du schreibst eine zweite Klasse, die das übernimmt.
Auf diesen Beitrag antworten »
Tina92

Vielen Dank für die Antwort, da hätte ich auch selber drauf kommen können :-)
Auf diesen Beitrag antworten »
Tina92

Habe es jetzt einmal umgeschrieben:

code:
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:
54:
55:
56:
57:
58:
package object_test1;

import java.io.*;


public class Object_Test1 
{
    public static void main (String[]args) throws Exception
    {
        Eintrag [] neuerEintrag = new Eintrag [2];
        neuerEintrag[0] = new Eintrag ("Miler"); 
        neuerEintrag[1] = new Eintrag ("Thomson");
        Ausgabe.schreiben(neuerEintrag);
        Eintrag[] eingabe = Ausgabe.lesen(neuerEintrag);
        for (int i=0; i<eingabe.length;i++)
        {
            System.out.println(eingabe[i].name);
        }
    }
}

class Eintrag implements Serializable
{
    protected String name;
    public Eintrag (String name)
    {
        this.name = name; 
    }
}

class Ausgabe extends Eintrag implements Serializable 
{
    protected String name; 
    
    public Ausgabe (String name)
    {
        super (name);
    }
    
    
    public static void schreiben (Eintrag [] eint) throws Exception
    {
        ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream("text.dat"));
        oos.writeObject(eint);
        oos.close();
    }

    public static Eintrag [] lesen (Eintrag [] eint) throws Exception 
    {
        ObjectInputStream ois = new ObjectInputStream (new FileInputStream ("text.dat"));
        Eintrag [] eintrag = (Eintrag []) ois.readObject();
        ois.close();
        return eintrag;
    }
}




Jetzt müsste ich nur noch die bereits geschriebenen Objekte beim Einlesen in eine ArrayList zwischenspeichern und dann bei der Methode schreiben die ArrayList übergeben und die neuen Einträge? Beim FileWriter gibt es ja append, sobald ich das auf true setzte, werden die neuen Elemente angehängt, aber das habe ich beim OOS leider nicht?


Vielen dank.
 
Auf diesen Beitrag antworten »
eulerscheZahl

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
public class Main {

	public static void main(String[] args) throws Exception
	{
		Ausgabe ausgabe = new Ausgabe();
		ausgabe.erstelleEintrag(new Eintrag("Miler"));
		ausgabe.erstelleEintrag(new Eintrag("Thomson"));
		ausgabe.schreiben();

		//hier eine neue Instanz erzeugen, die die Daten wieder einliest. Sonst zeigt das gar nichts
		Ausgabe ausgabe2 = new Ausgabe();
		ausgabe2.lesen();
		Eintrag[] eingabe = ausgabe2.getEintrag();
		for (int i = 0; i < eingabe.length; i++)
		{
			if (eingabe[i] != null)
				System.out.println(eingabe[i]);
		}
	}
}


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
class Eintrag implements Serializable
{
	private String name;

	public Eintrag(String name)
	{
		this.name = name;
	}

	@Override
	public String toString() {
		return name;
	}
}


code:
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:
public class Ausgabe implements Serializable {
	private Eintrag[] eintrag = new Eintrag[10]; //alternativ ArrayList

	public void schreiben() throws FileNotFoundException, IOException {
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("text.dat"));
		oos.writeObject(eintrag);
		oos.close();
	}

	public void lesen() throws FileNotFoundException, IOException, ClassNotFoundException {
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream("text.dat"));
		eintrag = (Eintrag[]) ois.readObject();
		ois.close();
	}

	public void erstelleEintrag(Eintrag e) {
		for (int i = 0; i < eintrag.length; i++) {
			if (eintrag[i] == null) {
				eintrag[i] = e;
				break;
			}
		}
	}

	public Eintrag[] getEintrag() {
		return eintrag;
	}
}
Auf diesen Beitrag antworten »
Tina92

Herzlichen Dank :-)
 
Neue Frage »
Antworten »


Verwandte Themen