"வணக்கம், அமிகோ! நேற்று ரிஷி உங்களிடம் FileInputStream மற்றும் FileOutputStream பற்றிச் சொன்னார் . இன்று நான் உங்களுக்கு FileReader மற்றும் FileWriter வகுப்புகளைப் பற்றி சொல்கிறேன் ."

நீங்கள் ஏற்கனவே யூகித்துள்ளபடி, இந்த வகுப்புகள் அனைத்தும் கோப்பு பொருள் மற்றும் இன்புட்ஸ்ட்ரீம் , அவுட்புட்ஸ்ட்ரீம் , ரீடர் மற்றும் ரைட்டர் "இன்டர்ஃபேஸ்கள்" ஆகியவற்றுக்கு இடையேயான அடாப்டர்கள்.

"அவை கோப்பு மற்றும் ரீடர்/ரைட்டருக்கு இடையே உள்ள அடாப்டர்களைப் போலவே இருக்கும், ஆனால் நீங்கள் ஒரு சரம் பொருளைக் கட்டமைப்பாளருக்கு அனுப்ப வேண்டும், கோப்பு அல்ல!"

"உண்மையில், அவர்களிடம் பல கன்ஸ்ட்ரக்டர்கள் உள்ளனர். கோப்பு மற்றும் சரம் பொருள்கள் இரண்டிற்கும் கன்ஸ்ட்ரக்டர்கள் உள்ளன. நீங்கள் ஒரு சரம் பொருளை கன்ஸ்ட்ரக்டருக்கு அனுப்பினால், பின்னர் கன்ஸ்ட்ரக்டர் கடந்து சென்ற சரம் பொருளில் இருந்து எடுக்கப்பட்ட கோப்பு பாதையைப் பயன்படுத்தி ஒரு கோப்பு பொருளை அமைதியாக உருவாக்குவார்."

இது வசதிக்காக. ஜாவாவின் படைப்பாளிகள் இந்த வகுப்புகளுக்கு அடிக்கடி பயன்படுத்தும் வழக்குகளை எடுத்து அனைத்திற்கும் கட்டமைப்பாளர்களை எழுதினர். இது மிகவும் வசதியானது, நீங்கள் நினைக்கவில்லையா?

"ஓ, ஆம். வசதியானது. நான் ஒப்புக்கொள்கிறேன். ஆனால் நான் ஏன் தொடர்ந்து எழுத வேண்டும்:"
BufferedReader bufferedReader = புதிய 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();
}

"கிட்டத்தட்ட வேறுபாடுகள் இல்லை."

"ஆம், வேறுபாடுகள் மிகக் குறைவு."