Mục lục
Việc thêm dữ liệu vào một file đã tồn tại trước đó gần như rất phổ biến, vì những dữ liệu đã tồn tại trước đó là một phần thông tin mà chúng ta đã xây dựng. Nếu xử lý không đúng, thì những dữ liệu này sẽ bị xoá sạch bởi các Java IO class.
Trong bài viết này chúng ta sẽ cùng nhau tìm cách thêm text vào cuối file thay vì xoá hết dữ liệu tồn tại trước đó.
Tóm tắt chúnng ta có 4 cách cơ bản sau:
- FileWriter
- BufferedWriter
- PrintWriter
- FileOutputStream
Thêm text vào cuối file – FileWriter
FileWriter cung cấp một constructor:
public FileWriter(String fileName, boolean append) throws IOException
cho phép ghi dữ liệu vào cuối file thông qua thuộc tính boolean append. Chúng ta chỉ cần truyền giá trị append = TRUE như sau:
File file = new File("append.txt"); FileWriter fr = new FileWriter(file, true); fr.write("data"); fr.close();
Thêm text vào cuối file – BufferedWriter
Bản chất BufferedWriter là một wrapper của FileWriter cung cấp cơ chế bộ nhớ đệm nhầm tối ưu hiệu xuất ghi file.
File file = new File("append.txt"); FileWriter fr = new FileWriter(file, true); BufferedWriter br = new BufferedWriter(fr); br.write("data"); br.close(); fr.close();
Thêm text vào cuối file – PrintWriter
Sử dụng PrintWriter bao bên ngoài BufferedWriter như sau:
File file = new File("append.txt"); FileWriter fr = new FileWriter(file, true); BufferedWriter br = new BufferedWriter(fr); PrintWriter pr = new PrintWriter(br); pr.println("data"); pr.close(); br.close(); fr.close();
Thêm text vào cuối file – FileOutputStream
Bạn nên sử dụng FileOutputStream để nối dữ liệu vào file khi đó là dữ liệu thô, dữ liệu nhị phân, hình ảnh, video, v.v.
OutputStream os = new FileOutputStream(new File("append.txt"), true); os.write("data".getBytes(), 0, "data".length()); os.close();
Ví dụ
import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; public class JavaAppendToFile { public static void main(String[] args) { String filePath = "./src/append.txt"; String appendText = "This String will be appended to the file, Byte=0x0A 0xFF"; appendUsingFileWriter(filePath, appendText); appendUsingBufferedWriter(filePath, appendText, 2); appendUsingPrintWriter(filePath, appendText); appendUsingFileOutputStream(filePath, appendText); } private static void appendUsingPrintWriter(String filePath, String text) { File file = new File(filePath); FileWriter fr = null; BufferedWriter br = null; PrintWriter pr = null; try { // Sử dụng PrintWriter fr = new FileWriter(file, true); br = new BufferedWriter(fr); pr = new PrintWriter(br); pr.println(text); } catch (IOException e) { e.printStackTrace(); } finally { try { pr.close(); br.close(); fr.close(); } catch (IOException e) { e.printStackTrace(); } } } private static void appendUsingFileOutputStream(String fileName, String data) { OutputStream os = null; try { // Sử dụng FileOutputStream os = new FileOutputStream(new File(fileName), true); os.write(data.getBytes(), 0, data.length()); } catch (IOException e) { e.printStackTrace(); } finally { try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } private static void appendUsingBufferedWriter(String filePath, String text, int noOfLines) { File file = new File(filePath); FileWriter fr = null; BufferedWriter br = null; try { // Sử dụng BufferedWriter fr = new FileWriter(file, true); br = new BufferedWriter(fr); for (int i = 0; i < noOfLines; i++) { br.newLine(); // you can use write or append method br.write(text); } } catch (IOException e) { e.printStackTrace(); } finally { try { br.close(); fr.close(); } catch (IOException e) { e.printStackTrace(); } } } private static void appendUsingFileWriter(String filePath, String text) { File file = new File(filePath); FileWriter fr = null; try { // Sử dụng FileWriter fr = new FileWriter(file, true); fr.write(text); } catch (IOException e) { e.printStackTrace(); } finally { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } } }
Nguồn