Làm việc với file
1. Đọc toàn bộ nội dung file (cách hiện đại, đơn giản nhất)
Phần tiêu đề “1. Đọc toàn bộ nội dung file (cách hiện đại, đơn giản nhất)”Từ Java 11, java.nio.file.Files cung cấp các phương thức tiện lợi để đọc/ghi file mà không cần quản lý luồng (stream) thủ công:
import java.nio.file.Files;import java.nio.file.Path;import java.io.IOException;
public class Main { public static void main(String[] args) { try { String content = Files.readString(Path.of("data.txt")); System.out.println(content); } catch (IOException e) { System.out.println("Lỗi đọc file: " + e.getMessage()); } }}2. Đọc file theo từng dòng
Phần tiêu đề “2. Đọc file theo từng dòng”import java.nio.file.Files;import java.nio.file.Path;import java.util.List;import java.io.IOException;
try { List<String> lines = Files.readAllLines(Path.of("data.txt")); for (String line : lines) { System.out.println(line); }} catch (IOException e) { System.out.println("Lỗi đọc file: " + e.getMessage());}3. Ghi file
Phần tiêu đề “3. Ghi file”import java.nio.file.Files;import java.nio.file.Path;import java.io.IOException;
try { Files.writeString(Path.of("output.txt"), "Xin chào, Java!\n");} catch (IOException e) { System.out.println("Lỗi ghi file: " + e.getMessage());}Ghi thêm vào cuối file (append) thay vì ghi đè:
import java.nio.file.StandardOpenOption;
Files.writeString(Path.of("output.txt"), "Thêm dòng mới\n", StandardOpenOption.APPEND);4. Đọc từng dòng lớn với BufferedReader (khi file rất lớn)
Phần tiêu đề “4. Đọc từng dòng lớn với BufferedReader (khi file rất lớn)”Với file lớn, đọc hết vào bộ nhớ một lần (readString/readAllLines) có thể không hiệu quả - dùng BufferedReader để đọc từng dòng theo luồng:
import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;
try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); }} catch (IOException e) { System.out.println("Lỗi đọc file: " + e.getMessage());}5. try-with-resources - tự động đóng tài nguyên
Phần tiêu đề “5. try-with-resources - tự động đóng tài nguyên”Cú pháp try (...) ở ví dụ trên gọi là try-with-resources: mọi tài nguyên khai báo trong dấu ngoặc () sẽ tự động được đóng khi khối try kết thúc (kể cả khi có lỗi), không cần viết finally { reader.close(); } thủ công. Đây là cách được khuyến nghị khi làm việc với file, kết nối mạng, hoặc bất kỳ tài nguyên nào cần đóng sau khi dùng.
6. Kiểm tra file tồn tại
Phần tiêu đề “6. Kiểm tra file tồn tại”import java.nio.file.Files;import java.nio.file.Path;
if (Files.exists(Path.of("data.txt"))) { System.out.println("File tồn tại");}Tổng kết
Phần tiêu đề “Tổng kết”Files.readString()/Files.readAllLines()để đọc nhanh toàn bộ nội dung file (Java 11+)Files.writeString()để ghi file, thêmStandardOpenOption.APPENDđể ghi nối tiếpBufferedReaderphù hợp hơn khi cần đọc file lớn theo từng dòng- Luôn dùng try-with-resources để tài nguyên được tự động đóng, tránh rò rỉ