"Merhaba Amigo! Dün Rishi sana FileInputStream ve FileOutputStream'den bahsetti . Ve bugün sana FileReader ve FileWriter sınıflarından bahsedeceğim ."

Muhtemelen zaten tahmin ettiğiniz gibi, tüm bu sınıflar File nesnesi ile InputStream , OutputStream , Reader ve Writer «arayüzleri» arasındaki bağdaştırıcılardır .

"Dosya ve Okuyucu/Yazıcı arasındaki bağdaştırıcılara benzerler, ancak yapıcıya bir Dosya değil, yalnızca bir String nesnesi iletmeniz gerekir!"

"Aslında birkaç kurucuları var. Hem File hem de String nesneleri için kurucular var. Yapıcıya bir String nesnesi iletirseniz, yapıcı, geçirilen String nesnesinden alınan dosya yolunu kullanarak sessizce bir File nesnesi oluşturur."

Bu rahatlık içindir. Java'nın yaratıcıları, bu sınıflar için en sık kullanılan durumları aldı ve hepsi için yapıcılar yazdı. Bu oldukça uygun, sence de öyle değil mi?

"Ah, evet. Kullanışlı. Katılıyorum. Ama o zaman neden sürekli şunu yazmak zorundayım:"
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
"Neden bu kullanım durumunu eklemediler?"

"Buradaki sorun,   tipik bir Java programının konsolla çalışmamasıdır. Gerçekte, ondan neredeyse hiçbir şey okumazsınız. Bir web sunucusu, uygulama sunucusu veya başka bir karmaşık sistemle bile."

Ancak, verileri ve metni konsola göndermek için PrintStream'e sahibiz. Çünkü bu "sunucu uygulamaları" durumlarını, hatalarını ve diğer her türlü bilgiyi görüntülemek için genellikle konsolu kullanır.

"Anladım. Ayrıca FileReader ve FileWriter kullanarak bir dosyayı da kopyalayabilir misin?"

"Evet, eğer bir metin dosyasıysa (yani karakterlerden oluşuyorsa). İşte bir örnek:"

Diskteki bir dosyayı kopyalama
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();
}

"Neredeyse hiç fark yok."

"Evet, farklar çok az."