"हैलो, अमीगो! कल ऋषि ने आपको FileInputStream और FileOutputStream के बारे में बताया था। और आज मैं आपको FileReader और FileWriter क्लासेस के बारे में बताऊँगा ।"

जैसा कि आप शायद पहले ही अनुमान लगा चुके हैं, ये सभी वर्ग फ़ाइल ऑब्जेक्ट और इनपुटस्ट्रीम , आउटपुटस्ट्रीम , रीडर और राइटर «इंटरफेस» के बीच एडेप्टर हैं।

"वे फ़ाइल और रीडर/राइटर के बीच एडेप्टर के समान हैं, लेकिन आपको केवल कन्स्ट्रक्टर को स्ट्रिंग ऑब्जेक्ट पास करने की आवश्यकता है, फाइल नहीं!"

"असल में, उनके पास कई कन्स्ट्रक्टर हैं। फ़ाइल और स्ट्रिंग ऑब्जेक्ट्स दोनों के लिए कन्स्ट्रक्टर हैं। यदि आप कन्स्ट्रक्टर को स्ट्रिंग ऑब्जेक्ट पास करते हैं, तो कन्स्ट्रक्टर पारित स्ट्रिंग ऑब्जेक्ट से लिए गए फ़ाइल पथ का उपयोग करके चुपचाप फाइल ऑब्जेक्ट बना देगा।"

यह सुविधा के लिए है। जावा के रचनाकारों ने इन वर्गों के लिए सबसे अधिक उपयोग के मामलों को लिया और उन सभी के लिए रचनाकार लिखे। यह काफी सुविधाजनक है, क्या आपको नहीं लगता?

"ओह, हाँ। सुविधाजनक। मैं सहमत हूँ। लेकिन फिर मुझे लगातार क्यों लिखना पड़ता है:"
BufferedReaderbufferedReader = new BufferedReader(new InputStreamReader(System.in));
"उन्होंने इस उपयोग के मामले को क्यों नहीं जोड़ा?"

"यहाँ मुद्दा यह है कि एक   विशिष्ट जावा प्रोग्राम कंसोल के साथ काम नहीं करता है। वास्तव में, आप लगभग कभी भी इससे कुछ भी नहीं पढ़ते हैं। यहां तक ​​कि एक वेब सर्वर, एप्लिकेशन सर्वर, या कुछ अन्य जटिल सिस्टम के साथ भी।"

लेकिन हमारे पास कंसोल पर डेटा और टेक्स्ट आउटपुट करने के लिए PrintStream है। क्योंकि ये «सर्वर एप्लिकेशन» अक्सर अपनी स्थिति, त्रुटियों और अन्य सभी प्रकार की जानकारी प्रदर्शित करने के लिए कंसोल का उपयोग करते हैं।

"समझ गया। और आप FileReader और FileWriter का उपयोग करके फ़ाइल की प्रतिलिपि भी बना सकते हैं?"

"हाँ, यदि यह एक पाठ फ़ाइल है (अर्थात इसमें वर्ण हैं)। यहाँ एक उदाहरण है:"

डिस्क पर फ़ाइल कॉपी करें
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();
}

"लगभग कोई मतभेद नहीं।"

"हाँ, मतभेद न्यूनतम हैं।"