บทความนี้รวบรวม 5 วิธีการเขียนไฟล์ใน Java ตั้งแต่คลาสิกจนถึง NIO.2 ทุกตัวอย่างจะตรวจสอบว่าไฟล์มีอยู่แล้วหรือไม่ ก่อนจะเขียน (ถ้าไม่มีจะสร้างใหม่)
1. ใช้ BufferedWriter (Classic IO)
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class WriteToFile {
public static void main(String[] args) {
String content = "Content to write to file";
File file = new File("writefile.txt");
try (FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw)) {
bw.write(content);
System.out.println("เขียนไฟล์สำเร็จ");
} catch (IOException ex) {
System.out.println("เกิดข้อผิดพลาด: " + ex.getMessage());
ex.printStackTrace();
}
}
}
โหมด Append: ใช้ new FileWriter(file, true) เพื่อต่อท้ายไฟล์แทนการเขียนทับ
2. ใช้ PrintWriter
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
public class WriteToFile {
public static void main(String[] args) {
String content = "Content to write to file";
File file = new File("writefile.txt");
try (FileWriter fw = new FileWriter(file);
PrintWriter pw = new PrintWriter(fw)) {
pw.println(content); // println เพิ่ม newline ให้อัตโนมัติ
pw.printf("Number: %d", 42); // รองรับ formatting
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
3. ใช้ FileOutputStream (Byte Stream)
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class WriteToFile {
public static void main(String[] args) {
String content = "Content to write to file";
File file = new File("writefile.txt");
try (FileOutputStream fos = new FileOutputStream(file)) {
byte[] bytes = content.getBytes(); // แปลง String เป็น byte[]
fos.write(bytes);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
4. ใช้ Files Class (NIO.2 - Java 7+)
วิธีที่แนะนำให้ใช้ในปัจจุบัน - โค้ดสั้น กระชับ จัดการ resource ให้อัตโนมัติ
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
public class WriteToFile {
public static void main(String[] args) {
Path path = Paths.get("writefile.txt");
String content = "Content to write to file";
try {
// เขียนทับ (CREATE, TRUNCATE_EXISTING)
Files.writeString(path, content);
// หรือเขียนแบบระบุ options เอง
// Files.write(path, content.getBytes(), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
// Append mode
// Files.writeString(path, "\nAppended line", StandardOpenOption.APPEND);
System.out.println("เขียนไฟล์สำเร็จด้วย NIO.2");
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
5. ใช้ DataOutputStream (เขียน Primitive Types)
import java.io.*;
public class WriteToFile {
public static void main(String[] args) {
String content = "Content to write to file";
File file = new File("writefile.txt");
try (FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream dos = new DataOutputStream(bos)) {
dos.writeUTF(content); // เขียน String แบบ UTF-8
dos.writeInt(42); // เขียน int
dos.writeDouble(3.14); // เขียน double
dos.writeBoolean(true); // เขียน boolean
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
สรุปและคำแนะนำ
| วิธี | เหมาะสำหรับ | Java Version |
|---|---|---|
| Files.writeString / Files.write | ทั่วไป ใช้งานง่ายที่สุด | Java 7+ (writeString: Java 11+) |
| BufferedWriter | เขียนข้อความจำนวนมาก ต้องการ buffer | Java 1.1+ |
| PrintWriter | ต้องการ formatting (printf, println) | Java 1.1+ |
| FileOutputStream | เขียน binary data / byte array | Java 1.0+ |
| DataOutputStream | เขียน primitive types (int, double, boolean) | Java 1.0+ |
Best Practice: ใช้ try-with-resources (Java 7+) เพื่อปิด stream อัตโนมัติ และใช้ NIO.2 (Files class) สำหรับโปรเจกต์ใหม่