"Ciao, Amigo, ancora una volta."

"Ciao a te, Rishi. Di cosa parlerà la lezione di oggi?"

"Oggi vi parlerò di Reader and Writer."

"Ma, Rishi, so già quasi tutto di loro!"

"La ripetizione è la madre dell'apprendimento."

"Hmm. Bene, va bene."

" Reader e Writer sono analoghi a InputStream e OutputStream , ma funzionano con caratteri, non con byte. A volte sono anche chiamati flussi di caratteri, al contrario di  InputStream  e  OutputStream , che sono chiamati flussi di byte."

"Uno è per i caratteri, l'altro per i byte. Ricordo."

"Non è solo questo. Queste classi sono appositamente progettate per funzionare con testo e stringhe. Oggi esamineremo due implementazioni classiche di queste classi astratte: FileReader e FileWriter ."

"Ecco i metodi della classe FileReader :"

Metodo Descrizione
int read() Legge un carattere dal flusso e lo restituisce.
int read(char cbuf[], int offset, int length) Legge un array di caratteri, restituisce il numero di caratteri letti.
boolean ready() Restituisce vero se è possibile leggere dal flusso.
void close() Chiude il flusso di input.
int read(java.nio.CharBuffer target) Legge un set di caratteri in un buffer.
int read(char cbuf[]) Legge un array di caratteri.
long skip(long n) Salta n caratteri nello stream.
String getEncoding() Restituisce la codifica corrente del flusso.

"Beh, so quasi tutto questo. Ma per quanto riguarda FileWriter?"

Metodo Descrizione
void write(int c) Scrive un carattere nel flusso.
void write(char cbuf[], int off, int len) Scrive una matrice di caratteri nel flusso.
void write(char cbuf[]) Scrive una matrice di caratteri nel flusso.
void write(String str, int off, int len) Scrive parte di una stringa nel flusso.
void write(String str) Scrive una stringa nel flusso.
void flush() Scrive su disco tutto ciò che è memorizzato nella cache.
void close() Chiude il flusso.
String getEncoding() Restituisce la codifica corrente del flusso.

"So che!"

"È meraviglioso. Allora diamo un'occhiata a un esempio interessante, e più tardi Diego ti assegnerà altri compiti."

"Come si legge un file riga per riga? Sai scrivere il codice?"

"Facile, guarda:"

Codice
// 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. Non male."

"Non male? È tutto semplice e bello. Ammettilo, Rishi, ho già un'eccellente padronanza dei thread I/O. Quindi cosa potrebbe essere migliorato qui?"

"Beh, per esempio, potresti fare così:"

Il codice di Rishi
File file = new File("c:/document.txt");

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

"Hmm. Quello è più breve. E proprio oggi mi hai parlato di tutti questi metodi. Lo rielaborerò. Grazie per la lezione, Rishi."

"Buona fortuna, Amico."