"Hej, Amigo! Igår berättade Rishi om FileInputStream och FileOutputStream . Och idag ska jag berätta om klasserna FileReader och FileWriter ."

Som du säkert redan gissat är alla dessa klasser adaptrar mellan File-objektet och " gränssnitten" InputStream , OutputStream , Reader och Writer .

"De liknar adaptrar mellan fil och Reader/Writer, men du behöver bara skicka ett String-objekt till konstruktorn, inte en fil!"

"Egentligen har de flera konstruktorer. Det finns konstruktorer för både File- och String-objekt. Om du skickar ett String-objekt till konstruktorn, kommer konstruktorn att skapa ett File-objekt i tysthet med hjälp av filsökvägen från det passerade String-objektet."

Detta är för bekvämlighets skull. Javas skapare tog de vanligaste användningsfallen för dessa klasser och skrev konstruktörer för dem alla. Det är ganska bekvämt, tycker du inte?

"Åh, ja. Bekvämt. Jag håller med. Men varför måste jag då hela tiden skriva:"
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
"Varför lade de inte till det här användningsfallet?"

"Problemet här är att ett   typiskt Java-program inte fungerar med konsolen. I själva verket läser du nästan aldrig något från den. Inte ens med en webbserver, applikationsserver eller något annat komplicerat system."

Men vi har PrintStream för att mata ut data och text till konsolen. Eftersom dessa «serverapplikationer» ofta använder konsolen för att visa deras status, fel och all möjlig annan information.

"Förstår det. Och du kan också kopiera en fil med FileReader och FileWriter?"

"Ja, om det är en textfil (dvs den består av tecken). Här är ett exempel:"

Kopiera en fil på disken
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();
}

"Nästan inga skillnader."

"Ja, skillnaderna är minimala."