"สวัสดี Amigo! เมื่อวาน Rishi บอกคุณเกี่ยวกับFileInputStreamและFileOutputStreamและวันนี้ฉันจะบอกคุณเกี่ยวกับ คลาส FileReaderและFileWriter "

อย่างที่คุณอาจเดาได้แล้วว่า คลาสทั้งหมดเหล่านี้เป็นอะแดปเตอร์ระหว่างวัตถุ File และInputStream , OutputStream , ReaderและWriter «อินเทอร์เฟซ»

"พวกมันคล้ายกับอะแดปเตอร์ระหว่างไฟล์และ Reader/Writer แต่คุณจะต้องส่งวัตถุสตริงไปยังตัวสร้าง ไม่ใช่ไฟล์!"

"จริงๆแล้ว พวกมันมีตัวสร้างหลายตัว มีตัวสร้างสำหรับทั้งวัตถุ File และ String หากคุณส่งวัตถุ String ไปยังตัวสร้าง ตัวสร้างจะสร้างวัตถุ File อย่างเงียบ ๆ โดยใช้เส้นทางไฟล์ที่นำมาจากวัตถุ String ที่ส่งผ่าน"

ทั้งนี้เพื่อความสะดวก ผู้สร้าง Java ใช้กรณีการใช้งานบ่อยที่สุดสำหรับคลาสเหล่านี้และเขียนตัวสร้างสำหรับพวกเขาทั้งหมด ค่อนข้างสะดวกคุณว่าไหม

"โอ้ ใช่ สะดวก ฉันเห็นด้วย แต่ทำไมฉันต้องเขียนตลอดเวลา:"
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
"ทำไมพวกเขาไม่เพิ่มกรณีการใช้งานนี้"

"ปัญหาคือ   โปรแกรม Java ทั่วไปไม่ทำงานกับคอนโซล ความจริงแล้ว คุณแทบไม่ได้อ่านอะไรจากมันเลยแม้แต่กับเว็บเซิร์ฟเวอร์ แอปพลิเคชันเซิร์ฟเวอร์ หรือระบบที่ซับซ้อนอื่นๆ"

แต่เรามี 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();
}

"แทบไม่ต่างกันเลย"

"ใช่ ความแตกต่างมีน้อย"