"Hallo, Amigo, nogmaals."

"Hallo, Rishi. Waar gaat de les van vandaag over?"

"Vandaag ga ik je vertellen over Reader en Writer."

"Maar, Rishi, ik weet al bijna alles over ze!"

"Herhaling is de moeder van leren."

"Hm. Nou, oké."

" Reader en Writer zijn analoog aan InputStream en OutputStream , maar ze werken met karakters, niet met bytes. Soms worden ze ook wel karakterstromen genoemd, in tegenstelling tot  InputStream  en  OutputStream , die bytestromen worden genoemd."

"De ene is voor karakters, de andere is voor bytes. Ik herinner het me."

"Dat is het niet alleen. Deze klassen zijn speciaal ontworpen om met tekst en tekenreeksen te werken. Vandaag zullen we kijken naar twee klassieke implementaties van deze abstracte klassen: FileReader en FileWriter ."

"Dit zijn de methoden van de klasse FileReader :"

Methode Beschrijving
int read() Leest een karakter uit de stream en retourneert het.
int read(char cbuf[], int offset, int length) Leest een reeks tekens, retourneert het aantal gelezen tekens.
boolean ready() Retourneert true als het mogelijk is om uit de stream te lezen.
void close() Sluit de invoerstroom.
int read(java.nio.CharBuffer target) Lees een set tekens in een buffer.
int read(char cbuf[]) Leest een reeks tekens.
long skip(long n) Slaat n karakters in de stream over.
String getEncoding() Retourneert de huidige codering van de stream.

'Nou, dat weet ik bijna allemaal. Maar hoe zit het met FileWriter?'

Methode Beschrijving
void write(int c) Schrijft één karakter naar de stream.
void write(char cbuf[], int off, int len) Schrijft een reeks tekens naar de stream.
void write(char cbuf[]) Schrijft een reeks tekens naar de stream.
void write(String str, int off, int len) Schrijft een deel van een string naar de stream.
void write(String str) Schrijft een string naar de stream.
void flush() Schrijft alles wat in het geheugen in de cache is opgeslagen naar schijf.
void close() Sluit de stroom af.
String getEncoding() Retourneert de huidige codering van de stream.

"Dat weet ik!"

"Dat is geweldig. Laten we dan eens naar een interessant voorbeeld kijken, en later zal Diego je meer taken geven."

"Hoe lees je een bestand regel voor regel? Kun jij de code schrijven?"

"Makkelijk, kijk:"

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. Niet slecht."

"Niet slecht? Het is allemaal eenvoudig en mooi. Geef toe, Rishi - ik heb al een uitstekende beheersing van I/O-threads. Dus wat kan hier worden verbeterd?"

"Nou, je zou bijvoorbeeld dit kunnen doen:"

Rishi's code
File file = new File("c:/document.txt");

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

"Hmm. Dat is korter. En vandaag heb je me over al deze methoden verteld. Ik zal het herwerken. Bedankt voor de les, Rishi."

"Succes, Amigo."