ภาษาจาวาได้จัดเตรียมคลาส FileWriter และคลาส FileReader ใน JavaAPI เพื่อให้เราใช้อ่านและเขียนข้อมูลกับไฟล์ข้อความ (text file) ในขั้นตอนการสร้างออบเจกต์ FileWriter เราสามารถกำหนดพารามิเตอร์ได้ว่าจะเขียนทับข้อมูลเดิมหรือเขียนต่อจากข้อมูลที่มีอยู่
File file = new File(“/home/username/path/to/your/file.txt”);
FileWriter writer = new FileWriter(file); // เป็นการเขียนทับข้อมูลเดิม
writer.write(“Hello”);
writer.write(“Java”);
writer.close();
++++++++++++++++++++++++++
File file = new File(“/home/username/path/to/your/file.txt”);
FileWriter writer = new FileWriter(file, true); // เป็นการเขียนต่อจากข้อมูลที่มีอยู่
writer.write(“Hello, World\n”);
writer.close();
++++++++++++++++++++++++++
เมื่อเราเลิกใช้ออบเจกต์ FileWriter แล้วทุกครั้งเราต้องใช้เมธอด close() เพื่อยกเลิกการใช้ออบเจกต์และคืนหน่วยความจำเพื่อป้องกันปัญหาหน่วยความจำเต็ม แต่เราอาจจะลืมหรือโปรแกรมอาจจะมีปัญหาจนทำงานมาไม่ถึงบรรทัดที่เราสั่ง close() ดังนั้นเพื่อการันตีว่าเราได้ปิดออบเจกต์และคืนหน่วยความจำอย่างถูกต้องทุกครั้ง เราสามารถใช้ try-with-resources บล๊อกซึ่งจะดำเนินการให้เราโดยอัตโนมัติเมื่อเสร็จสิ้นการใช้งานออบเจกต์
File file = new File(“/home/username/path/to/your/file.txt”);
try (FileWriter writer = new FileWriter(file)) { // <=== เริ่มต้นบล๊อก try-with-resources
writer.write(“Hello, World”);
} catch (IOException e) {
System.out.printf(“An exception occurs %s”, e.getMessage());
} // <=== สิ้นสุดบล๊อก try-with-resources
++++++++++++++++++++++++++
นอกจากคลาส FIleWriter แล้วยังมีคลาส PrinterWriter ซึ่งเราสามารถจัดรูปแบบข้อมูลที่ต้องการเขียนในไฟล์ได้ เราสามารถเขียนข้อความ (string) ชนิดข้อมูลพื้นฐาน (primitive data type) หรือแม้แต่อาเรย์ของอักขระ (array of characters) โดยใช้เมธอด print(), println() หรือ printf ตัวอย่างเช่น
File file = new File(“/home/art/Documents/file.txt”);
try (PrintWriter printWriter = new PrintWriter(file)) {
printWriter.print(“Hello”); // พิมพ์ข้อความ
printWriter.println(“Java”); // พิมพ์ข้อความและขึ้นบรรทัดใหม่
printWriter.println(123); // พิมพ์ตัวเลข
printWriter.printf(“You have %d %s”, 400, “gold coins”); // กำหนดรูปแบบการพิมพ์
} catch (IOException e) {
System.out.printf(“An exception occurs %s”, e.getMessage());
}
+++++++++++++++++++++++++++
ภาษาจาวามีหลายคลาสสำหรับการอ่านข้อมูลจากไฟล์ข้อความ โดยเป็นการอ่านข้อมูลในแบบสตรีมของอักขระ (character input stream) ซึ่งจะอ่านข้อมูลได้ทั้งแบบรายอัขระและแบบข้อความ เช่น คลาส FileReader คลาส CharArrayReader คลาส StringReader ซึ่งคลาสเหล่านี้สืบทอดมาจากคลาส Java.io.Reader จึงมีการใช้งานเมธอดที่เหมือนกัน เช่น int read() เป็นการอ่านครั้งละอักขระและคืนค่าเป็นเลขจำนวนเต็มของอักขระ และถ้าข้อมูลหมดแล้วจะคืนค่า -1 , int read(char[ ] cbuf) เป็นการอ่านอักขระครั้งละหลายๆอักขระแล้วนำมาเขียนลงในอาเรย์และคืนค่าเป็ฌนจำนวนอักขระที่อ่าน และถ้าข้อมูลหมดแล้วจะคืนค่า -1 , int read(char[ ], cbuf, int off, int len) ป็นการอ่านอักขระครั้งละหลายๆอักขระแล้วนำมาเขียนลงในอาเรย์โดยกำหนดว่าจะเขียนลงตำแหน่งใดในอาเรย์ หลังการใช้งานต้องยกเลิกออบเจกต์ด้วยเมธอด close() เช่นเดียวกัน ตัวอย่างด้านล่างเป็นการใช้งานคลาส FileReader ซึ่งในการสร้างออบเจกต์ FileReader สามารถระบุไฟล์ที่จะอ่านๆเป็นออบเจกต์ File หรือชื่อไฟล์ก็ได้ เช่น new FileReader(String filename), new FileReader(File file) ตัวอย่างการใช้งาน เช่น
Reader reader = new FileReader(“file.txt”);
char first = (char) reader.read(); // i
char second = (char) reader.read(); // n
char[] others = new char[12];
int number = reader.read(others); // 10
another example
FileReader reader = new FileReader(“file.txt”);
int charAsNumber = reader.read();
while(charAsNumber != -1) {
char character = (char) charAsNumber;
System.out.print(character);
charAsNumber = reader.read();
}
reader.close();
+++++++++++++++++++++++++++