"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:"
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.
GO TO FULL VERSION