— Bună, Amigo, încă o dată.

"Bună ziua, Rishi. Despre ce va fi lecția de astăzi?"

„Astăzi am să vă povestesc despre Reader și Writer”.

„Dar, Rishi, știu deja aproape totul despre ei!”

„Repetiția este mama învățării”.

"Hmm. Ei bine, bine."

" Reader și Writer sunt analogi cu InputStream și OutputStream , dar funcționează cu caractere, nu cu octeți. Uneori sunt numite și fluxuri de caractere, spre deosebire de  InputStream  și  OutputStream , care sunt numite fluxuri de octeți."

"Unul este pentru caractere, celălalt este pentru octeți. Îmi amintesc."

"Nu este doar atât. Aceste clase sunt special concepute pentru a lucra cu text și șiruri de caractere. Astăzi ne vom uita la două implementări clasice ale acestor clase abstracte: FileReader și FileWriter ."

„Iată metodele clasei FileReader :”

Metodă Descriere
int read() Citește un caracter din flux și îl returnează.
int read(char cbuf[], int offset, int length) Citește o matrice de caractere, returnează numărul de caractere citite.
boolean ready() Returnează adevărat dacă este posibil să citiți din flux.
void close() Închide fluxul de intrare.
int read(java.nio.CharBuffer target) Citiți un set de caractere într-un buffer.
int read(char cbuf[]) Citește o serie de caractere.
long skip(long n) Omite n caractere din flux.
String getEncoding() Returnează codificarea curentă a fluxului.

„Ei bine, știu aproape toate astea. Dar cum rămâne cu FileWriter?”

Metodă Descriere
void write(int c) Scrie un caracter în flux.
void write(char cbuf[], int off, int len) Scrie o matrice de caractere în flux.
void write(char cbuf[]) Scrie o matrice de caractere în flux.
void write(String str, int off, int len) Scrie o parte dintr-un șir în flux.
void write(String str) Scrie un șir în flux.
void flush() Scrie tot ce este stocat în cache în memorie pe disc.
void close() Închide fluxul.
String getEncoding() Returnează codificarea curentă a fluxului.

"Știu că!"

"Este minunat. Atunci să ne uităm la un exemplu interesant, iar mai târziu Diego vă va oferi mai multe sarcini."

"Cum citești un fișier linie cu linie? Puteți scrie codul?"

"Ușor, uite:"

Cod
// 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. Nu-i rău."

"Nu-i rău? Totul este simplu și frumos. Recunoaște, Rishi - am deja o stăpânire excelentă a firelor de I/O. Deci, ce ar putea fi îmbunătățit aici?"

„Ei bine, de exemplu, ai putea face asta:”

Codul lui Rishi
File file = new File("c:/document.txt");

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

"Hmm. Asta este mai scurt. Și chiar azi mi-ai spus despre toate aceste metode. O voi relua. Mulțumesc pentru lecție, Rishi."

— Mult succes, Amigo.