Java-Programmierung: Speicherung von Objekten und Arrays in eine Datei
*Mein Auftrag ist, ein Programm zu schreiben, dass speichert ein array mit fünf int-Werte 1,2,3,4, und 5, ein Datum-Objekt für die aktuelle Uhrzeit und einen double-Wert 5.5. in einer Datei mit dem Namen Exercies19_2.txt. Als Nächstes bin ich zum schreiben einer Methode im Programm, das geöffnet wird Exercises19_2.txt liest die Daten und zeigt auf das command-Fenster. Wenn ich mein Programm, dass ich immer dieses:
Exception in thread "main" java.io.OptionalDataException auf java.io.ObjectInputStream.readObject0(Quelle Unbekannt)
bei java.io.ObjectInputStream.readObject(Quelle Unbekannt)
bei WriteArray.main(WriteArray.java:29).
Können Sie mir helfen herauszufinden, was ich falsch mache????? Hier ist, was ich geschrieben habe:
import java.io.*;
public class WriteArray {
public static void main(String[] args)throws ClassNotFoundException,IOException {
int[] numbers = {1, 2, 3, 4, 5};
//Create an output stream for file
ObjectOutputStream output = new ObjectOutputStream
(new FileOutputStream("Exercises19_2.txt", true));
//Write to file
output.writeDouble(5.5);
output.writeObject(numbers);
output.writeObject(new java.util.Date());
output.writeUTF("Exercises19_2.txt");
//Close the stream
output.close();
//Create an input stream for file
ObjectInputStream input = new ObjectInputStream
(new FileInputStream("Exercises19_2.txt"));
int[]newNumbers = (int[])(input.readObject());
for (int i = 0; i < newNumbers.length; i++)
System.out.println("Integers: " + newNumbers[i] + " ");
String FileName= input.readUTF();
double Double = input.readDouble();
java.util.Date date = (java.util.Date)(input.readObject());
System.out.println("DateTime: " + date);
//Display the output
System.out.println("Double: " + " " + input.readDouble());
System.out.println("FileName: " + " " + input.readUTF());
//Close the stream
input.close();
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie Lesen Sie die Antworten sorgfältig das nächste mal.
aix, Chris und Mike Adler gab Sie den genauen Tipp: Lesen Sie wieder in der gleichen Reihenfolge wie du geschrieben hast in die Datei.
Danach, die Lösung ist ganz einfach:
Beim serialisieren und Deserialisieren, um ein objectOutputStream, die Sie gelesen haben, in der die Objekte in der Reihenfolge, die Sie, schrieb Sie. Das erste, was Sie schrieb war die Datei ein Doppelzimmer mit
output.writeDouble(5.5);
Sie müssen also Lesen Sie die Doppel-zurück in bevor Sie Lesen können, die zahlen-array.Lesen Sie wieder in der gleichen Reihenfolge wie du geschrieben hast in der Datei (doppelte, Objekt, Datum).
Jeder
output.writeXXX()
rufen Sie schreibt etwas an die output-Datei. Beim Lesen der Daten wieder, die Sequenz liest, muss genau entsprechen der Reihenfolge schreibt. Alles andere wird nicht funktionieren.P. S. Die Tatsache, dass der name der Datei
Exercies19_2.txt
endet in.txt
Hinweise, dass es sein sollte eine text-Datei (d.h. lesbar durch Mensch).ObjectOutputStream
nicht erzeugen einer text-Datei, erzeugt es eine binäre eins. Möchten Sie vielleicht zu prüfen, mit Ihrem Lehrer zu sehen, was Sie erwartet.