"Hi, Amigo, muli."

"Hello to you, Rishi. Tungkol saan ang lesson ngayon?"

"Ngayon sasabihin ko sa iyo ang tungkol sa Reader at Writer."

"Pero, Rishi, alam ko na halos lahat tungkol sa kanila!"

"Ang pag-uulit ay ang ina ng pag-aaral."

"Hmm. Well, okay."

" Ang Reader at Writer ay mga analog sa InputStream at OutputStream , ngunit gumagana ang mga ito sa mga character, hindi byte. Minsan tinatawag din silang mga stream ng character, kumpara sa  InputStream  at  OutputStream , na tinatawag na mga byte stream."

"Ang isa ay para sa mga character, ang isa ay para sa mga byte. Naalala ko."

"Hindi lang iyon. Espesyal na idinisenyo ang mga klase na ito para gumana sa text at mga string. Ngayon ay titingnan natin ang dalawang klasikong pagpapatupad ng mga abstract na klase na ito: FileReader at FileWriter ."

"Narito ang mga pamamaraan ng klase ng FileReader :"

Pamamaraan Paglalarawan
int read() Nagbabasa ng isang character mula sa stream at ibinabalik ito.
int read(char cbuf[], int offset, int length) Nagbabasa ng hanay ng mga character, ibinabalik ang bilang ng mga character na nabasa.
boolean ready() Nagbabalik ng true kung posibleng basahin mula sa stream.
void close() Isinasara ang input stream.
int read(java.nio.CharBuffer target) Magbasa ng isang set ng mga character sa isang buffer.
int read(char cbuf[]) Nagbabasa ng hanay ng mga character.
long skip(long n) Nilalaktawan ang n character sa stream.
String getEncoding() Ibinabalik ang kasalukuyang pag-encode ng stream.

"Well, alam ko halos lahat ng ito. Pero paano ang FileWriter?"

Pamamaraan Paglalarawan
void write(int c) Nagsusulat ng isang character sa stream.
void write(char cbuf[], int off, int len) Nagsusulat ng hanay ng mga character sa stream.
void write(char cbuf[]) Nagsusulat ng hanay ng mga character sa stream.
void write(String str, int off, int len) Nagsusulat ng bahagi ng isang string sa stream.
void write(String str) Nagsusulat ng string sa stream.
void flush() Isinulat ang lahat ng naka-cache sa memorya sa disk.
void close() Isinasara ang stream.
String getEncoding() Ibinabalik ang kasalukuyang pag-encode ng stream.

"Alam ko yan!"

"Iyan ay kahanga-hanga. Pagkatapos ay tingnan natin ang isang kawili-wiling halimbawa, at mamaya ay bibigyan ka ni Diego ng higit pang mga gawain."

"Paano ka nagbabasa ng file line by line? Kaya mo bang isulat ang code?"

"Dali, tingnan mo:"

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. Hindi masama."

"Not bad? Simple at maganda ang lahat. Aminin mo, Rishi—I already have a excellent mastery of I/O threads. So what could improve here?"

"Buweno, halimbawa, magagawa mo ito:"

Code ni Rishi
File file = new File("c:/document.txt");

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

"Hmm. That is shorter. And just today you told me about all these ways. I'll rework it. Thank you for the lesson, Rishi."

"Good luck, Amigo."