"Salut, Amigo, encore une fois."

"Bonjour à toi, Rishi. De quoi va parler la leçon d'aujourd'hui ?"

"Aujourd'hui, je vais vous parler de Reader et Writer."

« Mais, Rishi, je sais déjà presque tout sur eux !

"La répétition est la mère de l'apprentissage."

"Hmm. Eh bien, d'accord."

" Reader et Writer sont analogues à InputStream et OutputStream , mais ils fonctionnent avec des caractères, pas des octets. Parfois, ils sont également appelés flux de caractères, par opposition à  InputStream  et  OutputStream , qui sont appelés flux d'octets."

"L'un est pour les caractères, l'autre pour les octets. Je m'en souviens."

"Il n'y a pas que ça. Ces classes sont spécialement conçues pour fonctionner avec du texte et des chaînes. Aujourd'hui, nous allons examiner deux implémentations classiques de ces classes abstraites : FileReader et FileWriter ."

"Voici les méthodes de la classe FileReader :"

Méthode Description
int read() Lit un caractère du flux et le renvoie.
int read(char cbuf[], int offset, int length) Lit un tableau de caractères, renvoie le nombre de caractères lus.
boolean ready() Renvoie vrai s'il est possible de lire à partir du flux.
void close() Ferme le flux d'entrée.
int read(java.nio.CharBuffer target) Lit un ensemble de caractères dans un tampon.
int read(char cbuf[]) Lit un tableau de caractères.
long skip(long n) Saute n caractères dans le flux.
String getEncoding() Renvoie l'encodage actuel du flux.

"Eh bien, je sais presque tout cela. Mais qu'en est-il de FileWriter?"

Méthode Description
void write(int c) Écrit un caractère dans le flux.
void write(char cbuf[], int off, int len) Écrit un tableau de caractères dans le flux.
void write(char cbuf[]) Écrit un tableau de caractères dans le flux.
void write(String str, int off, int len) Écrit une partie d'une chaîne dans le flux.
void write(String str) Écrit une chaîne dans le flux.
void flush() Écrit tout ce qui est mis en cache en mémoire sur le disque.
void close() Ferme le flux.
String getEncoding() Renvoie l'encodage actuel du flux.

"Je sais que!"

"C'est merveilleux. Alors regardons un exemple intéressant, et plus tard Diego vous donnera plus de tâches."

« Comment lit-on un fichier ligne par ligne ? Pouvez-vous écrire le code ? »

"Facile, regarde :"

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. Pas mal."

"Pas mal ? Tout est simple et beau. Avouez-le, Rishi, j'ai déjà une excellente maîtrise des threads d'E/S. Alors qu'est-ce qui pourrait être amélioré ici ?"

"Eh bien, par exemple, vous pourriez faire ceci :"

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

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

"Hmm. C'est plus court. Et aujourd'hui même, tu m'as parlé de toutes ces méthodes. Je vais retravailler. Merci pour la leçon, Rishi."

"Bonne chance Amigo."