Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Java เขียนไฟล์: 5 วิธีปฏิบัติจริง พร้อมโค้ดตัวอย่าง

บทความนี้รวบรวม 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เขียนข้อความจำนวนมาก ต้องการ bufferJava 1.1+
PrintWriterต้องการ formatting (printf, println)Java 1.1+
FileOutputStreamเขียน binary data / byte arrayJava 1.0+
DataOutputStreamเขียน primitive types (int, double, boolean)Java 1.0+

Best Practice: ใช้ try-with-resources (Java 7+) เพื่อปิด stream อัตโนมัติ และใช้ NIO.2 (Files class) สำหรับโปรเจกต์ใหม่

บทความเกี่ยวข้อง