Array Daten in Binär Datei schreiben/lesen

Seppe123

Mitglied
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
 
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 🙂
 
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.
 
Java:
	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
Java:
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]
 
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?
 
Habe jetzt mit bekommen, dass die Datei nicht den Inhalt nach dem Schliessen des Programms ausgeben kann ;(

Hier nochmal der überarbeitete Code:

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:

Code:
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...");
					}
				}
			}
		};
 
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 😉
 
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?
 
Zuletzt bearbeitet:

Zurück
Oben