Skip to Content
Javaการใช้งานขั้นสูงการอ่านและเขียนไฟล์ (File I/O)

การอ่านและเขียนไฟล์ (File I/O)

วันนี้เรามาเรียนรู้เกี่ยวกับการอ่านและเขียนไฟล์ หรือ File I/O (Input/Output) ซึ่งเป็นทักษะสำคัญในการจัดการข้อมูลในโปรแกรม Java กัน

File I/O คืออะไร?

File I/O เป็นกระบวนการอ่านข้อมูลจากไฟล์ (Input) และเขียนข้อมูลลงในไฟล์ (Output) เปรียบเสมือนการอ่านและจดบันทึกในสมุด 📖✏️

ทำไม File I/O ถึงสำคัญ?

  1. เก็บข้อมูลถาวร: ข้อมูลยังอยู่แม้ปิดโปรแกรม
  2. แลกเปลี่ยนข้อมูล: ระหว่างโปรแกรมหรือระบบต่างๆ
  3. จัดการข้อมูลขนาดใหญ่: ที่ไม่สามารถเก็บในหน่วยความจำได้ทั้งหมด

การอ่านไฟล์

Java มีหลายวิธีในการอ่านไฟล์ แต่เราจะเริ่มจากวิธีที่ง่ายและปลอดภัยที่สุดโดยใช้ Files class:

import java.nio.file.Files; import java.nio.file.Paths; import java.io.IOException; import java.util.List; public class อ่านไฟล์ตัวอย่าง { public static void main(String[] args) { try { List<String> บรรทัดทั้งหมด = Files.readAllLines(Paths.get("ข้อมูล.txt")); for (String บรรทัด : บรรทัดทั้งหมด) { System.out.println(บรรทัด); } } catch (IOException e) { System.out.println("เกิดข้อผิดพลาดในการอ่านไฟล์: " + e.getMessage()); } } }

การเขียนไฟล์

การเขียนไฟล์ก็สามารถทำได้ง่ายๆ ด้วย Files class เช่นกัน:

import java.nio.file.Files; import java.nio.file.Paths; import java.io.IOException; import java.util.Arrays; import java.util.List; public class เขียนไฟล์ตัวอย่าง { public static void main(String[] args) { List<String> บรรทัด = Arrays.asList("สวัสดี", "นี่คือการทดสอบ", "การเขียนไฟล์"); try { Files.write(Paths.get("ผลลัพธ์.txt"), บรรทัด); System.out.println("เขียนไฟล์เสร็จสิ้น"); } catch (IOException e) { System.out.println("เกิดข้อผิดพลาดในการเขียนไฟล์: " + e.getMessage()); } } }

การใช้ BufferedReader และ BufferedWriter

สำหรับไฟล์ขนาดใหญ่ การใช้ BufferedReader และ BufferedWriter จะมีประสิทธิภาพมากกว่า:

import java.io.*; public class BufferedIOตัวอย่าง { public static void main(String[] args) { // การอ่านไฟล์ try (BufferedReader reader = new BufferedReader(new FileReader("ข้อมูล.txt"))) { String บรรทัด; while ((บรรทัด = reader.readLine()) != null) { System.out.println(บรรทัด); } } catch (IOException e) { System.out.println("เกิดข้อผิดพลาดในการอ่านไฟล์: " + e.getMessage()); } // การเขียนไฟล์ try (BufferedWriter writer = new BufferedWriter(new FileWriter("ผลลัพธ์.txt"))) { writer.write("สวัสดี\n"); writer.write("นี่คือการทดสอบ\n"); writer.write("การเขียนไฟล์ด้วย BufferedWriter"); } catch (IOException e) { System.out.println("เกิดข้อผิดพลาดในการเขียนไฟล์: " + e.getMessage()); } } }

การจัดการกับ Resources

การใช้ try-with-resources ช่วยให้เราไม่ต้องปิด resources ด้วยตัวเอง:

try (BufferedReader reader = new BufferedReader(new FileReader("ข้อมูล.txt"))) { // โค้ดสำหรับอ่านไฟล์ } catch (IOException e) { // จัดการข้อผิดพลาด }

เทคนิคและข้อควรระวัง

  1. ใช้ Path ที่ถูกต้อง: ตรวจสอบว่า path ของไฟล์ถูกต้องและมีสิทธิ์ในการเข้าถึง
  2. ปิด Resources เสมอ: ใช้ try-with-resources หรือปิด streams ใน finally block
  3. จัดการ Exceptions: รับมือกับ IOException และ exceptions อื่นๆ ที่อาจเกิดขึ้น
  4. ใช้ Buffering: สำหรับไฟล์ขนาดใหญ่ ใช้ BufferedReader และ BufferedWriter
  5. เลือกใช้ Character Encoding ที่เหมาะสม: เช่น UTF-8 สำหรับการรองรับหลายภาษา

ตัวอย่างการใช้งานจริง: โปรแกรมบันทึกรายการสินค้า

มาดูตัวอย่างโปรแกรมที่ใช้ File I/O ในการบันทึกและอ่านรายการสินค้ากัน:

import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class โปรแกรมรายการสินค้า { private static final String ชื่อไฟล์ = "รายการสินค้า.txt"; public static void main(String[] args) { List<String> รายการสินค้า = อ่านรายการสินค้า(); Scanner scanner = new Scanner(System.in); while (true) { System.out.println("\n1. แสดงรายการสินค้า"); System.out.println("2. เพิ่มสินค้า"); System.out.println("3. ออกจากโปรแกรม"); System.out.print("เลือกตัวเลือก: "); int ตัวเลือก = scanner.nextInt(); scanner.nextLine(); // ล้างบรรทัดว่าง switch (ตัวเลือก) { case 1: แสดงรายการสินค้า(รายการสินค้า); break; case 2: System.out.print("ใส่ชื่อสินค้า: "); String สินค้าใหม่ = scanner.nextLine(); รายการสินค้า.add(สินค้าใหม่); บันทึกรายการสินค้า(รายการสินค้า); System.out.println("เพิ่มสินค้าเรียบร้อย"); break; case 3: System.out.println("ขอบคุณที่ใช้โปรแกรม"); return; default: System.out.println("ตัวเลือกไม่ถูกต้อง"); } } } private static List<String> อ่านรายการสินค้า() { List<String> รายการ = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new FileReader(ชื่อไฟล์))) { String บรรทัด; while ((บรรทัด = reader.readLine()) != null) { รายการ.add(บรรทัด); } } catch (IOException e) { System.out.println("ไม่พบไฟล์รายการสินค้า จะสร้างไฟล์ใหม่"); } return รายการ; } private static void บันทึกรายการสินค้า(List<String> รายการ) { try (BufferedWriter writer = new BufferedWriter(new FileWriter(ชื่อไฟล์))) { for (String สินค้า : รายการ) { writer.write(สินค้า); writer.newLine(); } } catch (IOException e) { System.out.println("เกิดข้อผิดพลาดในการบันทึกไฟล์: " + e.getMessage()); } } private static void แสดงรายการสินค้า(List<String> รายการ) { if (รายการ.isEmpty()) { System.out.println("ไม่มีสินค้าในรายการ"); } else { System.out.println("รายการสินค้า:"); for (int i = 0; i < รายการ.size(); i++) { System.out.println((i + 1) + ". " + รายการ.get(i)); } } } }

สรุป

File I/O เป็นทักษะสำคัญในการพัฒนาโปรแกรม Java ช่วยให้เราสามารถจัดการข้อมูลได้อย่างมีประสิทธิภาพ ไม่ว่าจะเป็นการอ่าน เขียน หรือแก้ไขข้อมูลในไฟล์ การเข้าใจและใช้ File I/O อย่างถูกต้องจะช่วยให้คุณสามารถพัฒนาโปรแกรมที่จัดการข้อมูลได้อย่างยืดหยุ่นและมีประสิทธิภาพ

ปรับปรุงล่าสุด