"Hello, Amigo! Sinabi sa iyo ni Rishi kahapon ang tungkol sa FileInputStream at FileOutputStream . At ngayon sasabihin ko sa iyo ang tungkol sa mga klase ng FileReader at FileWriter ."

Tulad ng malamang na nahulaan mo na, ang lahat ng mga klase na ito ay mga adapter sa pagitan ng File object at ng InputStream , OutputStream , Reader , at Writer «interfaces».

"Ang mga ito ay katulad ng mga adaptor sa pagitan ng File at Reader/Writer, ngunit kailangan mo lamang na ipasa ang isang String object sa constructor, hindi isang File!"

"Sa totoo lang, mayroon silang ilang constructor. May mga constructor para sa parehong File at String object. Kung ipapasa mo ang isang String object sa constructor, pagkatapos ay tahimik na gagawa ang constructor ng isang File object gamit ang file path na kinuha mula sa dumaan na String object."

Ito ay para sa kaginhawaan. Kinuha ng mga tagalikha ng Java ang pinakamadalas na mga kaso ng paggamit para sa mga klase na ito at nagsulat ng mga konstruktor para sa lahat ng mga ito. Iyan ay medyo maginhawa, hindi ba?

"Ay, oo. Maginhawa. Sumasang-ayon ako. Ngunit bakit kailangan kong patuloy na magsulat:"
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
"Bakit hindi nila idinagdag itong use case?"

"Ang isyu dito ay ang isang   tipikal na Java program ay hindi gumagana sa console. Sa totoo lang, halos wala kang nabasa mula rito. Kahit na may isang web server, application server, o ilang iba pang kumplikadong system."

Ngunit mayroon kaming PrintStream para sa pag-output ng data at text sa console. Dahil ang mga «server applications» na ito ay kadalasang gumagamit ng console upang ipakita ang kanilang katayuan, mga error, at lahat ng uri ng iba pang impormasyon.

"Got it. At maaari mo ring kopyahin ang isang file gamit ang FileReader at FileWriter?"

"Oo, kung ito ay isang text file (ibig sabihin, binubuo ito ng mga character). Narito ang isang halimbawa:"

Kopyahin ang isang file sa disk
public static void main(String[] args) throws Exception
{
 FileReader reader = new FileReader("c:/data.txt");
 FileWriter writer = new FileWriter("c:/result.txt");

 while (reader.ready()) //as long as there are unread bytes in the input stream
 {
  int data = reader.read(); //Read one character (the char will be widened to an int)
  writer.write(data); //Write one character (the int will be truncated/narrowed to a char)
 }

 //Close the streams after we done using them
 reader.close();
 writer.close();
}

"Halos walang pagkakaiba."

"Oo, ang mga pagkakaiba ay minimal."