"Hola, amigo, una vez más".

"Hola, Rishi. ¿De qué tratará la lección de hoy?"

"Hoy les voy a hablar sobre Reader y Writer".

"¡Pero, Rishi, ya sé casi todo sobre ellos!"

"La repetición es la madre del aprendizaje".

"Hmm. Bueno, está bien".

" Reader y Writer son análogos a InputStream y OutputStream , pero funcionan con caracteres, no con bytes. A veces también se denominan flujos de caracteres, a diferencia de  InputStream  y  OutputStream , que se denominan flujos de bytes".

"Uno es para caracteres, el otro es para bytes. Lo recuerdo".

"No es solo eso. Estas clases están especialmente diseñadas para trabajar con texto y cadenas. Hoy veremos dos implementaciones clásicas de estas clases abstractas: FileReader y FileWriter ".

"Aquí están los métodos de la clase FileReader :"

Método Descripción
int read() Lee un carácter de la secuencia y lo devuelve.
int read(char cbuf[], int offset, int length) Lee una matriz de caracteres, devuelve el número de caracteres leídos.
boolean ready() Devuelve verdadero si es posible leer de la secuencia.
void close() Cierra el flujo de entrada.
int read(java.nio.CharBuffer target) Leer un conjunto de caracteres en un búfer.
int read(char cbuf[]) Lee una matriz de caracteres.
long skip(long n) Salta n caracteres en la transmisión.
String getEncoding() Devuelve la codificación actual de la secuencia.

"Bueno, sé casi todo esto. Pero ¿qué pasa con FileWriter?"

Método Descripción
void write(int c) Escribe un carácter en la secuencia.
void write(char cbuf[], int off, int len) Escribe una matriz de caracteres en la secuencia.
void write(char cbuf[]) Escribe una matriz de caracteres en la secuencia.
void write(String str, int off, int len) Escribe parte de una cadena en la secuencia.
void write(String str) Escribe una cadena en la secuencia.
void flush() Escribe todo lo almacenado en caché en la memoria en el disco.
void close() Cierra la corriente.
String getEncoding() Devuelve la codificación actual de la secuencia.

"¡Yo sé eso!"

"Eso es maravilloso. Entonces veamos un ejemplo interesante, y luego Diego te dará más tareas".

"¿Cómo lees un archivo línea por línea? ¿Puedes escribir el código?"

"Fácil, mira:"

Código
// 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. No está mal".

"¿No está mal? Todo es simple y hermoso. Admítelo, Rishi, ya tengo un excelente dominio de los hilos de E/S. Entonces, ¿qué podría mejorarse aquí?"

"Bueno, por ejemplo, podrías hacer esto:"

el codigo de rishi
File file = new File("c:/document.txt");

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

"Hmm. Eso es más corto. Y justo hoy me hablaste de todos estos métodos. Lo volveré a trabajar. Gracias por la lección, Rishi".

"Buena suerte, amigo".