"Hello, Amigo! Semalam Rishi memberitahu anda tentang FileInputStream dan FileOutputStream . Dan hari ini saya akan memberitahu anda tentang kelas FileReader dan FileWriter ."

Seperti yang anda mungkin sudah meneka, semua kelas ini adalah penyesuai antara objek Fail dan InputStream , OutputStream , Reader dan Writer «antara muka».

"Ia serupa dengan penyesuai antara Fail dan Pembaca/Penulis, tetapi anda hanya perlu menghantar objek String kepada pembina, bukan Fail!"

"Sebenarnya, mereka mempunyai beberapa pembina. Terdapat pembina untuk kedua-dua objek Fail dan String. Jika anda menghantar objek String kepada pembina, maka pembina akan secara senyap-senyap mencipta objek Fail menggunakan laluan fail yang diambil daripada objek String yang diluluskan."

Ini untuk kemudahan. Pencipta Java mengambil kes penggunaan yang paling kerap untuk kelas ini dan menulis pembina untuk kesemuanya. Itu agak mudah, bukan?

"Oh, ya. Mudah. ​​Saya bersetuju. Tetapi mengapa saya perlu sentiasa menulis:"
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
"Mengapa mereka tidak menambah kes penggunaan ini?"

"Isu di sini ialah   program Java biasa tidak berfungsi dengan konsol. Sebenarnya, anda hampir tidak pernah membaca apa-apa daripadanya. Walaupun dengan pelayan web, pelayan aplikasi atau beberapa sistem rumit lain."

Tetapi kami mempunyai PrintStream untuk mengeluarkan data dan teks ke konsol. Kerana «aplikasi pelayan» ini sering menggunakan konsol untuk memaparkan status, ralat dan pelbagai maklumat lain.

"Faham. Dan anda juga boleh menyalin fail menggunakan FileReader dan FileWriter?"

"Ya, jika ia ialah fail teks (iaitu ia terdiri daripada aksara). Berikut ialah contoh:"

Salin fail pada cakera
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();
}

"Hampir tiada perbezaan."

"Ya, perbezaannya adalah minimum."