"Szia, Amigo! Tegnap Rishi mesélt neked a FileInputStreamről és a FileOutputStreamről . Ma pedig a FileReader és FileWriter osztályokról fogok mesélni ."

Mint valószínűleg már sejtette, ezek az osztályok a File objektum és az InputStream , OutputStream , Reader és Writer "interfészek" közötti adapterek.

"Hasonlítanak a File és Reader/Writer közötti adapterekhez, de csak egy String objektumot kell átadni a konstruktornak, nem egy fájlt!"

"Tulajdonképpen több konstruktoruk van. Mind a File, mind a String objektumokhoz vannak konstruktorok. Ha egy String objektumot adsz át a konstruktornak, akkor a konstruktor csendben létrehoz egy File objektumot az átadott String objektumból vett fájl elérési út használatával."

Ez a kényelem kedvéért. A Java készítői ezekhez az osztályokhoz a leggyakoribb használati eseteket vették, és mindegyikhez írtak konstruktőrt. Ez elég kényelmes, nem gondolod?

"Ó, igen. Kényelmes. Egyetértek. De akkor miért kell folyton azt írnom:"
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
– Miért nem adták hozzá ezt a használati esetet?

"A probléma itt az, hogy egy   tipikus Java program nem működik a konzollal. Igazság szerint szinte soha nem olvasol ki belőle semmit. Még webszerverrel, alkalmazásszerverrel vagy más bonyolult rendszerrel sem."

De van PrintStreamünk az adatok és szövegek konzolra történő kimenetéhez. Mert ezek a „szerveralkalmazások” gyakran a konzolt használják állapotuk, hibáik és mindenféle egyéb információ megjelenítésére.

"Megértettem. És a FileReader és a FileWriter segítségével is másolhat egy fájlt?"

"Igen, ha szöveges fájlról van szó (vagyis karakterekből áll). Íme egy példa:"

Másoljon egy fájlt a lemezre
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();
}

– Szinte semmi különbség.

– Igen, minimálisak a különbségek.