Đọc ghi file CSV
1. CSV là gì?
Phần tiêu đề “1. CSV là gì?”CSV (Comma-Separated Values) là định dạng file văn bản lưu dữ liệu dạng bảng, mỗi dòng là một bản ghi, các cột cách nhau bởi dấu phẩy:
name,age,scoreAn,20,8.5Binh,22,7.25Chi,19,9.02. Đọc file CSV (không dùng thư viện ngoài)
Phần tiêu đề “2. Đọc file CSV (không dùng thư viện ngoài)”Java không có lớp CSV có sẵn trong thư viện chuẩn - cách đơn giản nhất là đọc từng dòng rồi tách bằng split(","):
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("students.csv"));
String[] header = lines.get(0).split(","); System.out.println("Cột: " + String.join(" | ", header));
for (int i = 1; i < lines.size(); i++) { // bỏ qua dòng tiêu đề (index 0) String[] fields = lines.get(i).split(","); String name = fields[0]; int age = Integer.parseInt(fields[1]); double score = Double.parseDouble(fields[2]); System.out.printf("%s - %d tuổi - điểm %.2f%n", name, age, score); }} catch (IOException e) { System.out.println("Lỗi đọc file: " + e.getMessage());}3. Ghi file CSV
Phần tiêu đề “3. Ghi file CSV”import java.nio.file.Files;import java.nio.file.Path;import java.io.IOException;
List<String> rows = List.of( "name,age,score", "An,20,8.5", "Binh,22,7.25");
try { Files.write(Path.of("output.csv"), rows); // mỗi phần tử trong List là một dòng} catch (IOException e) { System.out.println("Lỗi ghi file: " + e.getMessage());}4. ⚠️ Giới hạn của split(",") đơn giản
Phần tiêu đề “4. ⚠️ Giới hạn của split(",") đơn giản”Cách tách chuỗi bằng split(",") không xử lý đúng các trường hợp phức tạp thường gặp trong CSV thực tế:
name,note"Nguyễn Văn A","Ghi chú có, dấu phẩy bên trong"Ở đây trường note chứa dấu phẩy nhưng được bao trong dấu ngoặc kép - split(",") đơn giản sẽ tách sai thành nhiều cột hơn thực tế. Với dữ liệu CSV phức tạp (có dấu phẩy/ngoặc kép/xuống dòng bên trong trường), nên dùng thư viện chuyên dụng như Apache Commons CSV hoặc OpenCSV thay vì tự viết logic tách chuỗi.
Tổng kết
Phần tiêu đề “Tổng kết”- Đọc CSV cơ bản: đọc từng dòng bằng
Files.readAllLines(), tách cột bằngsplit(",") - Ghi CSV: tạo
List<String>mỗi phần tử là một dòng, ghi bằngFiles.write() split(",")đơn giản không xử lý đúng dấu phẩy/ngoặc kép bên trong trường - dùng thư viện chuyên dụng cho dữ liệu CSV thực tế phức tạp