"Halo, Amigo! Kemarin Rishi memberi tahu Anda tentang FileInputStream dan FileOutputStream . Dan hari ini saya akan memberi tahu Anda tentang kelas FileReader dan FileWriter ."

Seperti yang mungkin sudah Anda duga, semua kelas ini adalah adaptor antara objek File dan «antarmuka» InputStream , OutputStream , Reader , dan Writer .

"Mereka mirip dengan adaptor antara File dan Pembaca/Penulis, tetapi Anda hanya perlu meneruskan objek String ke konstruktor, bukan File!"

"Sebenarnya, mereka memiliki beberapa konstruktor. Ada konstruktor untuk objek File dan String. Jika Anda meneruskan objek String ke konstruktor, maka konstruktor akan diam-diam membuat objek File menggunakan jalur file yang diambil dari objek String yang diteruskan."

Ini untuk kenyamanan. Pencipta Java mengambil kasus penggunaan yang paling sering untuk kelas-kelas ini dan menulis konstruktor untuk semuanya. Itu cukup nyaman, bukan begitu?

"Oh, ya. Nyaman. Saya setuju. Tapi mengapa saya harus terus-menerus menulis:"
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
"Mengapa mereka tidak menambahkan kasus penggunaan ini?"

"Masalahnya di sini adalah   program Java biasa tidak bekerja dengan konsol. Sebenarnya, Anda hampir tidak pernah membaca apa pun darinya. Bahkan dengan server web, server aplikasi, atau sistem rumit lainnya."

Tapi kami memiliki PrintStream untuk mengeluarkan data dan teks ke konsol. Karena «aplikasi server» ini sering menggunakan konsol untuk menampilkan status, kesalahan, dan segala macam informasi lainnya.

"Mengerti. Dan Anda juga dapat menyalin file menggunakan FileReader dan FileWriter?"

"Ya, jika itu file teks (yaitu terdiri dari karakter). Ini contohnya:"

Salin file di disk
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 tidak ada perbedaan."

"Ya, perbedaannya minimal."