Wie können primitive Datentypen in Binär-Dateien abgelegt und aus diesen gelesen werden?
Der Quelltext zeigt die Java-typische Schachtelung mehrerer Streams,
die es ermöglicht, je nach Aufgabenstellung unterschiedlichste
Lese- und Schreibeoperationen durchzuführen.
Im
vorliegenden Fall öffnet ein FileInputStream in der
Methode liesDatenAusDatei() eine Binärdatei und stellt
einen entsprechenden Byte-Stream zur Verfügung. Er wird an den
Konstruktor eines BufferedInputStream übergeben.
Dieser speichert die vom DataInputStream gelesenen Daten
temporär zwischen und erhöht so die Performance des
Lesevorgangs. Der Lesevorgang selbst findet im vorliegenden Fall mit
Hilfe der spezialisierten Methoden readInt() und readDouble()
statt. Nach Abschluss des Lesevorgangs und entsprechender
Weiterverarbeitung (hier: Ausgabe auf die Konsole) muss die
ausgelesene Datei durch die von der Oberklasse FilterInputStream
geerbte Methode close() wieder geschlossen werden.
Der beschriebene Prozess findet innerhalb eines try-catch-Blockes
statt, der die Existenz bzw. Lesbarkeit der Datei und den
Lesevorgang selbst überwacht.
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileStreamDemo {
private final String datei = "zahlen.dat";
public static void liesDatenAusDatei() {
DataInputStream dis = null;
try {
dis = new DataInputStream(
new BufferedInputStream(
new FileInputStream(datei)));
System.out.println(dis.readInt());
System.out.println(dis.readDouble());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (dis != null) dis.close();
} catch (IOException ioe){}
}
}
public static void schreibeDatenInDatei() {
DataOutputStream dos = null;
try {
dos = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream(datei)));
dos.writeInt(-5);
dos.writeDouble(Math.PI);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (dos != null) dos.close();
} catch (IOException ioe){}
}
}
public static void main(String[] args) {
schreibeDatenInDatei();
liesDatenAusDatei();
}
}
Der Schreibvorgang in die Datei findet in der Methode schreibeDatenInDatei() auf symmetrische Weise statt: Die gleiche Schachtelung wird hier durch die entsprechenden OutputStreams gewährleistet und den Schreibvorgang selbst erledigen die zugehörigen write()-Methoden.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.