**This is an old revision of the document!**
Dateien und Datenströme
Dateien
Datenströme
Typen von Datenströmen
Byte-Streams
Text (Binär)-Streams
Java I/O-Grundlagen
import java.io.*
Die java.io-Bibliothek
Wichtigste Klassen in java.io
Byte-Streams
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class StreamExample {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("binary.dat")) {
fos.write(new byte[]{65, 66, 67}); // A, B, C
} catch (IOException e) {
e.printStackTrace();
}
try (FileInputStream fis = new FileInputStream("binary.dat")) {
int b;
while ((b = fis.read()) != -1) {
System.out.print((char) b);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Text-Streams
Verschiedene Reader/Writer
Arbeiten mit Zeichen und unterstützen Encoding wie UTF-8 oder UTF-16
FileReader/ FileWriter
Lesen und Schreiben von Textdateien
BufferedReader/ BufferedWriter
FileReader/ FileWriter
import java.io.FileReader;
import java.io.IOException;
public class FileReaderExample {
public static void main(String[] args) {
try (FileReader reader = new FileReader("example.txt")) {
int ch;
while ((ch = reader.read()) != -1) { // Zeichenweise lesen
System.out.print((char) ch);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
FileReader/ FileWriter
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderWriterExample {
public static void main(String[] args) {
try (FileWriter writer = new FileWriter("example.txt")) {
writer.write("Hallo, Java IO!");
} catch (IOException e) {
e.printStackTrace();
}
try (FileReader reader = new FileReader("example.txt")) {
int ch;
while ((ch = reader.read()) != -1) {
System.out.print((char) ch);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
BufferedReader/ BufferedWriter
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = reader.readLine()) != null) { // Zeilenweise lesen
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
BufferedReader/ BufferedWriter
Wann verwende ich was
FileReader
BufferedReader
Best Practices:
try-with-resources: Automatisches Schließen von Streams, um Ressourcenlecks zu vermeiden.
Fehlerbehandlung: Abfangen von IOException für robusteren Code.
Datei neu erstellen vs. Daten an bestehende Datei anhängen
...
public static void main(String[] args) {
String filePath = "example.txt";
// Schreiben in die Datei (überschreibt den bestehenden Inhalt)
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
writer.write("Dies ist der erste Text in der Datei.");
writer.newLine(); // Neue Zeile einfügen
writer.write("Noch eine Zeile wird hinzugefügt.");
System.out.println("Text erfolgreich geschrieben.");
} catch (IOException e) {
System.out.println("Fehler beim Schreiben in die Datei: " + e.getMessage());
}
// Anhängen an die Datei
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath, true))) {
writer.newLine(); // Neue Zeile am Ende der Datei
writer.write("Dies ist ein angehängter Text.");
writer.newLine(); // Neue Zeile einfügen
writer.write("Noch ein angehängter Text.");
System.out.println("Text erfolgreich angehängt.");
} catch (IOException e) {
System.out.println("Fehler beim Anhängen an die Datei: " + e.getMessage());
}
}
...
What about Scanner?
Hauptsächliche Verwendung
Nicht nur Dateien lesen kann, sondern auch
Parsen von Eingaben bietet
flexibler, aber oft weniger performant bei großen Datenmengen geht
Vergleich: Scanner vs BufferedReader vs FileReader
| Kriterium | FileReader | BufferedReader | Scanner |
| Hauptzweck | Zeichenweise aus Dateien lesen. | Effizientes Lesen von Zeichen und Zeilen. | Lesen und Parsen von Eingaben, z. B. Zahlen oder Strings. |
| Lesemethoden | read() (Zeichenweise). | readLine() (Zeilenweise) oder read(). | Methoden wie nextInt(), nextLine(), next(). |
| Performance | Langsam für große Dateien. | Schnell für große Dateien. | Langsamer bei großen Datenmengen (Parsing braucht Zeit). |
Wann sollte man welchen verwenden?
Scanner
BufferedReader
FileReader