Lớp BufferedWriter
(Class BufferedWriter)
Lớp BufferedWriter trong Java là một lớp con của Writer, được sử dụng để ghi dữ liệu ký tự vào luồng đầu ra với hiệu suất cao nhờ vào việc sử dụng bộ nhớ đệm. Lớp này cung cấp các phương thức để ghi dữ liệu vào các đích khác nhau, như tệp văn bản hoặc luồng khác, và giúp giảm số lượng các thao tác I/O bằng cách ghi dữ liệu vào bộ đệm trước khi thực sự ghi ra đích.
Phương thức newLine() của lớp BufferedWriter trong Java sử dụng thuộc tính hệ thống line.separator để chèn ký tự phân cách dòng phù hợp với hệ điều hành đang sử dụng. Đây là một cách để đảm bảo rằng các ứng dụng Java có thể viết dữ liệu vào tệp hoặc luồng đầu ra mà không phải lo lắng về việc xử lý các ký tự phân cách dòng khác nhau giữa các hệ điều hành.
Khai báo lớp BufferedWriter trong Java
Để sử dụng lớp BufferedWriter, bạn cần import gói java.io bạn cần thêm câu lệnh import vào đầu file Java của mình. Gói này cung cấp các lớp và giao diện để thực hiện các hoạt động nhập xuất (I/O) trong Java.
Cú pháp câu lệnh import:
Cú pháp
import java.io.BufferedWriter;
Cú pháp khai báo lớp BufferedWriter:
Cú pháp
public class BufferedWriter
extends Writer
Dưới đây là giải thích chi tiết về cú pháp khai báo này:
↳ public: Từ khóa public cho biết rằng lớp BufferedWriter có thể được truy cập từ bất kỳ đâu trong chương trình Java. Lớp này không bị hạn chế quyền truy cập và có thể được sử dụng bởi các lớp khác trong bất kỳ gói (package) nào.
↳ class BufferedWriter: Từ khóa class chỉ ra rằng BufferedWriter là một lớp trong Java.
↳ extends Writer: BufferedWriter kế thừa từ lớp Writer, nghĩa là nó mở rộng và kế thừa tất cả các phương thức và thuộc tính của lớp Writer. BufferedWriter thừa hưởng các phương thức của lớp Writer, như write(), flush(), và close(). BufferedWriter bổ sung thêm khả năng sử dụng bộ đệm để cải thiện hiệu suất ghi dữ liệu và cung cấp các phương thức bổ sung như newLine() để xử lý các ký tự phân cách dòng.
Các Constructor của lớp BufferedWriter
Lớp BufferedReader cung cấp hai constructor để tạo đối tượng:
↳ BufferedWriter(Writer out): Tạo một đối tượng BufferedWriter sử dụng bộ đệm có kích thước mặc định để ghi vào luồng ký tự out.
↳ BufferedWriter(Writer out, int sz): Tạo một đối tượng BufferedWriter sử dụng bộ đệm có kích thước sz để ghi vào luồng ký tự out.
Các phương thức của lớp BufferedWriter
Các phương thức trong BufferedWriter cung cấp nhiều cách để ghi dữ liệu vào một luồng. Bạn có thể sử dụng chúng để ghi dữ liệu dưới dạng chuỗi, đệm dữ liệu để cải thiện hiệu suất ghi, và đảm bảo rằng dữ liệu được ghi hoàn tất vào luồng. Dưới đây là danh sách tất cả các phương thức của lớp BufferedWriter trong Java:
↳ void close(): Đóng luồng và giải phóng tài nguyên.
↳ void flush(): Buộc ghi dữ liệu đệm ra luồng đích.
↳ void newLine(): Viết một ký tự xuống dòng theo hệ điều hành.
↳ void write(char[] cbuf, int off, int len): Ghi một phần của mảng ký tự vào luồng.
↳ void write(int c): Ghi một ký tự vào luồng.
↳ void write(String s, int off, int len): Ghi một phần của một chuỗi vào luồng.
Ví dụ
Dưới đây là một ví dụ về cách sử dụng lớp BufferedWriter trong Java để ghi dữ liệu vào một tệp văn bản. Ví dụ này ghi một số dòng văn bản vào tệp và sử dụng phương thức newLine() để phân cách các dòng.
Ví dụ: Example.java
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class Example {
public static void main(String[] args) {
// Đường dẫn đến tệp văn bản
String filePath = "Example.txt";
// Sử dụng try-with-resources để tự động đóng BufferedWriter
try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath))) {
// Ghi dữ liệu vào tệp
bufferedWriter.write("Dòng 1");
bufferedWriter.newLine(); // Thêm ký tự phân cách dòng
bufferedWriter.write("Dòng 2");
bufferedWriter.newLine(); // Thêm ký tự phân cách dòng
bufferedWriter.write("Dòng 3");
} catch (IOException e) {
// Xử lý lỗi nếu có
e.printStackTrace();
}
}
}
Khi chương trình chạy, nội dung của file "Example.txt" sẽ là:
Dòng 2
Dòng 3
Ví dụ trên minh họa cách sử dụng BufferedWriter để ghi dữ liệu vào một tệp văn bản với hiệu suất cao nhờ vào bộ đệm. Việc sử dụng phương thức newLine() giúp đảm bảo các dòng được phân cách đúng cách theo quy định của hệ điều hành hiện tại.
Một số điểm lưu ý
↳ Tạo tệp mới: Nếu tệp đích không tồn tại, FileWriter sẽ tự động tạo tệp mới khi bạn khởi tạo nó. BufferedWriter sau đó sẽ ghi dữ liệu vào tệp mới này.
↳ Ghi đè tệp cũ: Nếu tệp đích đã tồn tại, FileWriter sẽ ghi đè lên nội dung hiện có của tệp. Tệp cũ sẽ bị xóa và thay thế bằng nội dung mới mà bạn ghi vào.
Nếu bạn muốn ghi dữ liệu vào tệp mà xóa nội dung cũ, bạn có thể sử dụng FileWriter với cách khởi tạo mặc định để tự động ghi đè nội dung cũ. Khi bạn tạo một đối tượng FileWriter với tên tệp mà tệp đó đã tồn tại, nó sẽ tự động ghi đè lên nội dung cũ của tệp mà không cần phải xóa tệp trước.
Ví dụ: Example.java
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class Example {
public static void main(String[] args) {
// Đường dẫn đến tệp văn bản
String filePath = "Example.txt";
// Sử dụng try-with-resources để tự động đóng BufferedWriter
try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath, true))) {
// Thêm dữ liệu vào cuối tệp, giữ lại nội dung cũ
bufferedWriter.write("Dữ liệu mới được thêm vào.");
bufferedWriter.newLine(); // Thêm ký tự phân cách dòng
} catch (IOException e) {
// Xử lý lỗi nếu có
e.printStackTrace();
}
}
}
Khi chương trình chạy, nội dung của file "Example.txt" sẽ là:
Dòng 2
Dòng 3
Dữ liệu mới.Dữ liệu mới được thêm vào.
Kết luận:
↳ Để ghi đè nội dung cũ của tệp, bạn chỉ cần sử dụng FileWriter mà không truyền tham số append hoặc truyền tham số append là false (mặc định).
↳ Để thêm dữ liệu vào cuối tệp mà không xóa nội dung cũ, bạn có thể khởi tạo FileWriter với tham số append là true.