# Array Daten in Binär Datei schreiben/lesen



## Seppe123 (28. Apr 2010)

Hallo

Versuche gerade mein Array in eine Binärdatei zu schreiben und wieder aus zulesen. Leider klappt das nicht.

Hier meine Codes:

public static void write(Datensatz Daten) {

ObjectOutputStream out = new ObjectOutputStream(new
FileOutputStream("Daten.dat"));
out.writeObject(Daten);
out.close();

}



public static Datensatz read() {

ObjectInputStream in = new ObjectInputStream(new
FileInputStream("Daten.dat"));
Datensatz [] Daten = in.readObject();
return Daten;
in.close();
}



Aufruf der Funktion nach for-Schleife:

...
Daten_ = new Datensatz(T1.getText(), T2.getText(), T3
.getText(), T4.getText(), T5.getText()); //Daten aus Eingabemaske

IO.write(Daten[0]);
...


Erklärung:

Daten - Arrayname
Datensatz - Klasse mit Daten wie Vorname, Nachname...


Kann wer helfen?

DANKE_


----------



## eRaaaa (28. Apr 2010)

Also meiner Meinung nach sind hier mehrere Dinge "merkwürdig" 

a) Du übergibst der Methode write ja nur einen einzelnen Datensatz, nicht das Array. Willst du nun nur einen einzelnen Datensatz oder doch das Array serialisieren? 

b) bei der read - Methode das gleiche Spiel. Du versuchst mit in.readObject() das Object(welches du übrigens casten müßtest) in ein Array zu legen(was dafür sprechen würde dass du doch das gesamte Array serialisieren willst). Allerdings steht in der Methodensignatur wieder nur Datensatz, kein Datensatz[] ?!

Und noch eine Anmerkung: in.close() NACH einem return geht nicht


----------



## Seppe123 (28. Apr 2010)

Danke für die Antwort. Verzweifle hier schon.

Möchte ein ganzes Array übergeben, aber zum Test habe ich nur das 1. Element übergeben. Ist das der Fehler?

Hier nochmal überarbeitet:

	public static void write(Datensatz []Daten) {

	         ObjectOutputStream out = new ObjectOutputStream(newFileOutputStream("Daten.dat"));
	         out.writeObject(Daten);
	         out.close();

		}


public static Datensatz[] read() {

			ObjectInputStream in = new ObjectInputStream(new FileInputStream(
					"Daten.dat"));
			Datensatz Daten = (Datensatz) in.readObject(); 
			return Daten;



Die Read konnte ich bisher noch nicht testen, da die write nicht klappt.


----------



## eRaaaa (28. Apr 2010)

```
public static void write(Datensatz[] daten) throws IOException {
		ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Daten.dat"));
		out.writeObject(daten);
		out.close();
	}

	public static Datensatz[] read() throws IOException, ClassNotFoundException{
		ObjectInputStream in = new ObjectInputStream(new FileInputStream("Daten.dat"));
		Datensatz[] daten = (Datensatz[]) in.readObject();
		in.close();
		return daten;
	}
```

Aufruf dann mit

```
IO.write(Daten); //Variablen(also hier Daten) lieber mit kleinem Anfangsbuchstaben!
```

Und deine Klasse Datensatz muss natürlich das Interface Serializable implementieren (als Anmerkung nebenbei ;D ) 
[c]class Datensatz implements Serializable {[/c]


----------



## Seppe123 (28. Apr 2010)

Das mit dem Serialize habe ich 

Klasse jetzt funktioniert es. Bei Arrays habe ich immer meine leichten Problem 

Gibt es eine gute Seite, wo das mit den Array gut erklärt ist?


----------



## eRaaaa (28. Apr 2010)

Seppe123 hat gesagt.:


> Bei Arrays habe ich immer meine leichten Problem
> Gibt es eine gute Seite, wo das mit den Array gut erklärt ist?



Mhm, meinst du Arrays im Allgemeinen? 
--> Arrays (The Java™ Tutorials > Learning the Java Language > Language Basics)
--> Java Insel 8 : Arrays


----------



## Seppe123 (28. Apr 2010)

Das ist ja Englisch ;-)

Ich danke vielmals für deine Hilfe :applaus:


----------



## Seppe123 (28. Apr 2010)

Habe jetzt mit bekommen, dass die Datei nicht den Inhalt nach dem Schliessen des Programms ausgeben kann ;(

Hier nochmal der überarbeitete Code:


```
public class IO {

	public static void write(Datensatz[] daten) throws IOException {
		ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(
				"Daten.dat"));
		out.writeObject(daten);
		out.close();
	}

	public static Datensatz[] read() throws IOException, ClassNotFoundException {
		ObjectInputStream in = new ObjectInputStream(new FileInputStream(
				"Daten.dat"));
		Datensatz[] daten = (Datensatz[]) in.readObject();
		in.close();
		return daten;
	}

}
```

Und der Aufruf erfolgt durch foldendes Ereignis:


```
MouseAdapter mouse_write = new MouseAdapter() {
			public void mouseDown(MouseEvent e) {
				{
					int i = 0;

					for (i = 0; i < Daten.length; i++)
						Daten[i] = new Datensatz(T1.getText(), T2.getText(), T3
								.getText(), T4.getText(), T5.getText());

					try {
						IO.write(Daten);

					} catch (Exception ex) {
						System.out.println("Mysterious...");
					}
				}
			}
		};
```


----------



## eRaaaa (28. Apr 2010)

MouseAdapter (Java Platform SE 6)

Daran könnts liegen: Eine mouseDown Methode kann ich dort nicht finden - soll heißen, die Methode wird wahrscheinlich gar nicht aufgerufen :bae:


----------



## Seppe123 (28. Apr 2010)

Muss vielleicht noch dazu sagen, dass es unter SWT programmiert ist


----------



## eRaaaa (28. Apr 2010)

Seppe123 hat gesagt.:


> Muss vielleicht noch dazu sagen, dass es unter SWT programmiert ist



Ah okay, von SWT habe ich keine Ahnung (sry)  Aber dennoch denke ich nicht dass es an der IO-Klasse oder so liegt..Hast du den MouseAdapter auch irgendwo registriert? Wird die Methode mouseDown aufgerufen, hast du das überprüft?
Ansonsten könnte sicherlich auch ein kleines Testprogramm, das man mal selbst ausführen kann, sicherlich nicht schaden


----------



## Seppe123 (28. Apr 2010)

Bei anderen Proggs geht die Methode immer. Werde mal ein Test Prog erstellen 

Nur mal kurz als Gedankenanregung. Wie kann ich es realisieren, dass beim Drücken des Button das Array um eins weiter läuft? For-Schleife wird komplett einmal durchlaufen und wie Pointer für Globales inkrement gibt es in Java nicht  Array 

Edit: Wie kann ich mit attempt Daten zur Datei hinzufügen?


----------

