ยูทิลิตี 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Path: การแทนตำแหน่งไฟล์
- ยูทิลิตี Files: อ่าน เขียน คัดลอก ย้าย
- การเดินสำรวจต้นไม้ไดเรกทอรีด้วย Files.walk
- WatchService: การตรวจติดตามการเปลี่ยนแปลงไฟล์