"Hej, Amigo! I går fortalte Rishi dig om FileInputStream og FileOutputStream . Og i dag vil jeg fortælle dig om FileReader og FileWriter klasserne."

Som du sikkert allerede har gættet, er alle disse klasser adaptere mellem File-objektet og InputStream , OutputStream , Reader og Writer «grænseflader».

"De ligner adaptere mellem File og Reader/Writer, men du behøver kun at sende et String-objekt til konstruktøren, ikke en File!"

"Faktisk har de flere konstruktører. Der er konstruktører til både File- og String-objekter. Hvis du sender et String-objekt til konstruktøren, så vil konstruktøren stille og roligt oprette et File-objekt ved hjælp af filstien taget fra det passerede String-objekt."

Dette er for nemheds skyld. Javas skabere tog de hyppigste use cases for disse klasser og skrev konstruktører til dem alle. Det er ret praktisk, synes du ikke?

"Åh, ja. Praktisk. Jeg er enig. Men hvorfor skal jeg så konstant skrive:"
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
"Hvorfor tilføjede de ikke denne use case?"

"Problemet her er, at et   typisk Java-program ikke virker med konsollen. I virkeligheden læser du næsten aldrig noget fra det. Selv med en webserver, applikationsserver eller et andet kompliceret system."

Men vi har PrintStream til udlæsning af data og tekst til konsollen. Fordi disse «serverapplikationer» ofte bruger konsollen til at vise deres status, fejl og alle mulige andre oplysninger.

"Forstår det. Og du kan også kopiere en fil ved hjælp af FileReader og FileWriter?"

"Ja, hvis det er en tekstfil (dvs. den består af tegn). Her er et eksempel:"

Kopier 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æsten ingen forskelle."

"Ja, forskellene er minimale."