„Hallo Amigo, noch einmal.“

„Hallo, Rishi. Worum geht es in der heutigen Lektion?“

„Heute werde ich Ihnen etwas über Reader und Writer erzählen.“

„Aber, Rishi, ich weiß schon fast alles über sie!“

„Wiederholung ist die Mutter des Lernens.“

„Hmm. Na ja, okay.“

Reader und Writer sind Analogien zu InputStream und OutputStream , aber sie arbeiten mit Zeichen, nicht mit Bytes. Manchmal werden sie auch Zeichenströme genannt, im Gegensatz zu  InputStream  und  OutputStream , die Byteströme genannt werden.“

„Eines ist für Zeichen, das andere für Bytes. Ich erinnere mich.“

„Das ist nicht nur das. Diese Klassen sind speziell für die Arbeit mit Text und Zeichenfolgen konzipiert. Heute werden wir uns zwei klassische Implementierungen dieser abstrakten Klassen ansehen: FileReader und FileWriter .“

„Hier sind die Methoden der FileReader- Klasse:“

Methode Beschreibung
int read() Liest ein Zeichen aus dem Stream und gibt es zurück.
int read(char cbuf[], int offset, int length) Liest ein Array von Zeichen und gibt die Anzahl der gelesenen Zeichen zurück.
boolean ready() Gibt true zurück, wenn es möglich ist, aus dem Stream zu lesen.
void close() Schließt den Eingabestream.
int read(java.nio.CharBuffer target) Liest einen Zeichensatz in einen Puffer.
int read(char cbuf[]) Liest ein Array von Zeichen.
long skip(long n) Überspringt n Zeichen im Stream.
String getEncoding() Gibt die aktuelle Codierung des Streams zurück.

„Nun, ich weiß fast alles. Aber was ist mit FileWriter?“

Methode Beschreibung
void write(int c) Schreibt ein Zeichen in den Stream.
void write(char cbuf[], int off, int len) Schreibt ein Array von Zeichen in den Stream.
void write(char cbuf[]) Schreibt ein Array von Zeichen in den Stream.
void write(String str, int off, int len) Schreibt einen Teil einer Zeichenfolge in den Stream.
void write(String str) Schreibt einen String in den Stream.
void flush() Schreibt alles, was im Speicher zwischengespeichert ist, auf die Festplatte.
void close() Schließt den Stream.
String getEncoding() Gibt die aktuelle Codierung des Streams zurück.

"Ich weiß, dass!"

„Das ist wunderbar. Dann schauen wir uns ein interessantes Beispiel an, und später wird dir Diego weitere Aufgaben geben.“

„Wie liest man eine Datei Zeile für Zeile? Können Sie den Code schreiben?“

„Einfach, schau:“

Code
// Create a list for storing the lines
List<String> list = new ArrayList<String>();

// Open the file
File file = new File("c:/document.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));

// As long as the file isn't empty, read from it
while (reader.ready())
{
 list.add(reader.readLine());
}

// Close the file
reader.close();

„Hmm. Nicht schlecht.“

„Nicht schlecht? Es ist alles einfach und schön. Gib es zu, Rishi – ich beherrsche I/O-Threads bereits hervorragend. Was könnte hier also verbessert werden?“

„Nun, Sie könnten zum Beispiel Folgendes tun:“

Rishis Code
File file = new File("c:/document.txt");

List list = Files.readAllLines(file.toPath(), Charset.defaultCharset());

„Hmm. Das ist kürzer. Und gerade heute hast du mir von all diesen Methoden erzählt. Ich werde es überarbeiten. Danke für die Lektion, Rishi.“

„Viel Glück, Amigo.“