"Hei, Amigo! I går fortalte Rishi deg om FileInputStream og FileOutputStream . Og i dag skal jeg fortelle deg om FileReader og FileWriter klassene."

Som du sikkert allerede har gjettet, er alle disse klassene adaptere mellom File-objektet og InputStream , OutputStream , Reader og Writer «grensesnittene».

"De ligner på adaptere mellom File og Reader/Writer, men du trenger bare å sende et String-objekt til konstruktøren, ikke en fil!"

"De har faktisk flere konstruktører. Det finnes konstruktører for både File- og String-objekter. Hvis du sender et String-objekt til konstruktøren, vil konstruktøren stille opprette et File-objekt ved å bruke filbanen tatt fra det passerte String-objektet."

Dette er for enkelhets skyld. Javas skapere tok de hyppigste brukstilfellene for disse klassene og skrev konstruktører for dem alle. Det er ganske praktisk, synes du ikke?

"Å, ja. Praktisk. Jeg er enig. Men hvorfor må jeg da hele tiden skrive:"
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
"Hvorfor la de ikke til denne brukssaken?"

"Problemet her er at et   typisk Java-program ikke fungerer med konsollen. I sannhet leser du nesten aldri noe fra det. Selv med en webserver, applikasjonsserver eller et annet komplisert system."

Men vi har PrintStream for å sende ut data og tekst til konsollen. Fordi disse «serverapplikasjonene» ofte bruker konsollen til å vise status, feil og all slags annen informasjon.

"Skjønner det. Og du kan også kopiere en fil ved hjelp av FileReader og FileWriter?"

"Ja, hvis det er en tekstfil (dvs. den består av 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();
}

"Nesten ingen forskjeller."

"Ja, forskjellene er minimale."