0Pricing
Java Academy · บทเรียน

ยูทิลิตี Files: อ่าน เขียน คัดลอก ย้าย

ใช้ Files.readString, writeString, copy, move, delete สำหรับการดำเนินการกับไฟล์ที่พบบ่อย

ยูทิลิตี Files: อ่าน เขียน คัดลอก ย้าย เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

คลาส Files

คลาส java.nio.file.Files มีเมธอดยูทิลิตีแบบสแตติกสำหรับอ่าน เขียน คัดลอก ย้าย และสอบถามข้อมูลไฟล์ โดยมาแทนโค้ดประกอบที่ยืดยาวของ FileInputStream/FileOutputStream

import java.nio.file.*;
import java.io.IOException;

Path file = Path.of("example.txt");
// All Files methods throw IOException — handle or propagate

การอ่านไฟล์

เมธอดสมัยใหม่สำหรับอ่านเนื้อหาทั้งหมดของไฟล์:

Path path = Path.of("notes.txt");

// Read as a single String (Java 11+)
String content = Files.readString(path);
System.out.println(content);

// Read as List of lines
List<String> lines = Files.readAllLines(path);
lines.forEach(System.out::println);

// Read as byte array
byte[] bytes = Files.readAllBytes(path);

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

เขียน String หรือคอลเลกชันของบรรทัดลงในไฟล์ด้วยการเรียกเพียงครั้งเดียว:

Path out = Path.of("output.txt");

// Write a String (overwrites by default)
Files.writeString(out, "Hello, NIO.2!");

// Write with StandardOpenOption.APPEND
Files.writeString(out, "\nAppended line", StandardOpenOption.APPEND);

// Write lines
List<String> lines = List.of("line1", "line2", "line3");
Files.write(out, lines);

การตรวจสอบคุณสมบัติไฟล์

สอบถามข้อมูลเมตาของไฟล์โดยไม่ต้องเปิดไฟล์:

Path path = Path.of("data.txt");

System.out.println(Files.exists(path));       // true/false
System.out.println(Files.isRegularFile(path)); // true if not dir
System.out.println(Files.isDirectory(path));   // true if dir
System.out.println(Files.isReadable(path));    // readable?
System.out.println(Files.size(path));          // bytes
System.out.println(Files.getLastModifiedTime(path));

การคัดลอกไฟล์

Files.copy(source, target) คัดลอกไฟล์ ใช้ StandardCopyOption เพื่อควบคุมการทำงาน:

Path src = Path.of("original.txt");
Path dst = Path.of("backup.txt");

// Throws if destination exists (default)
Files.copy(src, dst);

// Overwrite if exists:
Files.copy(src, dst, StandardCopyOption.REPLACE_EXISTING);

// Copy preserving file timestamps:
Files.copy(src, dst, StandardCopyOption.COPY_ATTRIBUTES);

การย้ายและเปลี่ยนชื่อไฟล์

Files.move() ย้ายหรือเปลี่ยนชื่อไฟล์ สามารถย้ายแบบอะตอมิกได้ด้วย ATOMIC_MOVE:

Path from = Path.of("temp.txt");
Path to   = Path.of("archive/report_2024.txt");

Files.move(from, to, StandardCopyOption.REPLACE_EXISTING);

// Rename in same directory:
Path renamed = from.resolveSibling("new_name.txt");
Files.move(from, renamed, StandardCopyOption.REPLACE_EXISTING);

การลบไฟล์

มีเมธอดลบสองแบบ — แบบหนึ่งจะแจ้งข้อผิดพลาดหากไม่พบไฟล์ อีกแบบจะไม่แจ้ง:

Path file = Path.of("temp.txt");

// Throws NoSuchFileException if file doesn't exist:
Files.delete(file);

// Returns false if file didn't exist (no exception):
boolean deleted = Files.deleteIfExists(file);
System.out.println("Deleted: " + deleted);

การสร้างไดเรกทอรี

สร้างไดเรกทอรี รวมถึงไดเรกทอรีระดับกลางทั้งหมด:

Path dir = Path.of("output/reports/2024");

// Creates all missing intermediate directories:
Files.createDirectories(dir);

// Creates a single directory (fails if parent missing):
Files.createDirectory(Path.of("output/reports/2025"));

ไฟล์และไดเรกทอรีชั่วคราว

สร้างไฟล์ชั่วคราวอย่างปลอดภัย — JVM สามารถล้างไฟล์เหล่านี้ได้:

// Temp file in default temp directory
Path tmp = Files.createTempFile("prefix_", ".txt");
Files.writeString(tmp, "temp data");
System.out.println(tmp); // something like /tmp/prefix_12345.txt

// Temp directory
Path tmpDir = Files.createTempDirectory("work_");
System.out.println(tmpDir);

การสตรีมบรรทัดด้วย Files.lines

Files.lines() ส่งคืน Stream<String> แบบประเมินผลเมื่อจำเป็น ซึ่งเหมาะกับไฟล์ขนาดใหญ่มากกว่า readAllLines เนื่องจากไม่โหลดทุกอย่างไว้ในหน่วยความจำ:

try (var stream = Files.lines(Path.of("large.log"))) {
    long errorCount = stream
        .filter(l -> l.contains("ERROR"))
        .count();
    System.out.println("Errors: " + errorCount);
} // stream (and underlying reader) closed automatically

การอ่านจากทรัพยากรใน Classpath

ใช้ร่วมกับ getClass().getResourceAsStream() และการคัดลอกด้วย NIO เพื่อโหลดทรัพยากร:

try (var in = getClass().getResourceAsStream("/config.json")) {
    Path tmp = Files.createTempFile("config", ".json");
    Files.copy(in, tmp, StandardCopyOption.REPLACE_EXISTING);
    String json = Files.readString(tmp);
    System.out.println(json);
}

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ควรใช้เมธอดใดเพื่ออ่านไฟล์บันทึกขนาดใหญ่โดยไม่โหลดทุกบรรทัดไว้ในหน่วยความจำพร้อมกัน

ทบทวน: ยูทิลิตี Files

ประเด็นสำคัญ:

  • Files.readString/readAllLines/readAllBytes — อ่านไฟล์ทั้งหมด
  • Files.writeString/write — เขียนสตริงหรือบรรทัด
  • Files.copy/move ร่วมกับ StandardCopyOption — คัดลอก/เปลี่ยนชื่อ/ย้าย
  • Files.delete/deleteIfExists — ลบอย่างปลอดภัย
  • Files.lines — สตรีมแบบประเมินผลเมื่อจำเป็นสำหรับไฟล์ขนาดใหญ่ (ใช้ try-with-resources)

คำถามที่พบบ่อย

บทเรียน “ยูทิลิตี Files: อ่าน เขียน คัดลอก ย้าย” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ยูทิลิตี Files: อ่าน เขียน คัดลอก ย้าย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ยูทิลิตี Files: อ่าน เขียน คัดลอก ย้าย”

ใช้ Files.readString, writeString, copy, move, delete สำหรับการดำเนินการกับไฟล์ที่พบบ่อย คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “ยูทิลิตี Files: อ่าน เขียน คัดลอก ย้าย” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Path: การแทนตำแหน่งไฟล์
  2. ยูทิลิตี Files: อ่าน เขียน คัดลอก ย้าย
  3. การเดินสำรวจต้นไม้ไดเรกทอรีด้วย Files.walk
  4. WatchService: การตรวจติดตามการเปลี่ยนแปลงไฟล์
← กลับไปที่ Java Academy