Bạn đã biết cách đọc file trong Java chưa? Ghi file trong Java thật đơn giản, bạn có thể sử dụng java.io.BufferedWriter
???
Hỏi có liên quan ghê? Há há cái thằng post bài nó học yếu môn Văn kìa? 😀
Đùa bạn tý thôi, mục đích là giới thiệu bài viết cách đọc file trong Java mà mình đã viết trước đó để bạn xem qua thôi…
À ha, mà thấy yếu văn thật, chẳng biết giới thiệu sao cả, đành viết lách vậy thôi 😀
Vào vấn đề chính nhé…
BufferedWriter là class thuộc luồng ký tự (character stream) được xây dựng để xử lý dữ liệu ký tự (Writer là class cha, cũng thuộc luồng ký tự). Không giống như luồng byte (luồng mà class OutputStream đảm nhận, luồng byte xử lý dữ liệu dưới dạng byte, không xử lý được dữ liệu Unicode), luồng ký tự có thể xử lý trực tiếp được chuỗi, mảng hoặc dữ liệu ký tự dưới dạng Unicode.
1. Ví dụ ghi file trong Java sử dụng BufferedWriter
Mình sẽ ghi một nội dung ngắn vào file “data.txt“, khi file này chưa tồn tại thì chương trình sẽ tự động tạo.
Sau khi ghi file xong bạn kiểm tra trong thư mục gốc của project có file không nhá 🙂
Nếu bạn chạy chương trình này lần 2 thì dữ liệu trong file “data.txt” sẽ bị ghi đè.
package com.ngockhuong; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class WriteToFile { private static final String FILENAME = "data.txt"; public static void main(String[] args) { BufferedWriter bw = null; FileWriter fw = null; try { String content = "Nội dung mình muốn viết vào file\n"; fw = new FileWriter(FILENAME); bw = new BufferedWriter(fw); bw.write(content); System.out.println("Xong"); } catch (IOException e) { e.printStackTrace(); } finally { try { if (bw != null) bw.close(); if (fw != null) fw.close(); } catch (IOException ex) { ex.printStackTrace(); } } } }
Kết quả
Nội dung mình muốn viết vào file
2. Tối ưu đoạn code trên trong Java 7
Sử dụng cấu trúc lệnh try-with-resources
để đóng tự động đối tượng từ lớp BufferedWriter sau khi sử dụng xong.
Chú ý: File vẫn bị ghi đè trong ví dụ này
package com.ngockhuong; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class WriteToFile { private static final String FILENAME = "data.txt"; public static void main(String[] args) { try (BufferedWriter bw = new BufferedWriter(new FileWriter(FILENAME))) { String content = "Nội dung mình muốn viết vào file\n"; bw.write(content); // không cần đóng BufferedWriter (nó đã tự động đóng) // bw.close(); System.out.println("Xong"); } catch (IOException e) { e.printStackTrace(); } } }
3. Ghi tiếp nội dung vào file
Trong 2 ví dụ trên, khi thay đổi nội dung cần ghi vào file và chạy lại chương trình thì nội dung mới sẽ thay thế nội dung cũ mà không được ghi thêm vào. Bởi chế độ ghi đè đã được mặc định khi tạo đối tượng FileWriter với constructor không có tham số.
Vậy để ghi thêm nội dung vào cuối file, bạn phải truyền thêm một tham số boolean vào constructor khi tạo đối tượng FileWriter
// thêm true vào tham số thứ 2 FileWriter fw = new FileWriter(FILENAME, true); BufferedWriter bw = new BufferedWriter(fw);
package com.ngockhuong; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class WriteToFile { private static final String FILENAME = "data.txt"; public static void main(String[] args) { try (BufferedWriter bw = new BufferedWriter(new FileWriter(FILENAME, true))) { String content = "Nội dung mình muốn viết vào file\n"; bw.write(content); // không cần đóng BufferedWriter (nó đã tự động đóng) // bw.close(); System.out.println("Xong"); } catch (IOException e) { e.printStackTrace(); } } }