Trong bài viết này, chúng ta sẽ cùng tìm hiểu về lớp BufferedReader và BufferedWriter trong Java và các phương thức cùng với các ví dụ dẫn chứng.
Lớp BufferedReader
Lớp BufferedReader của gói java.io có thể được sử dụng với các kiểu lớp Reader khác để đọc dữ liệu ở dạng ký tự hiệu quả hơn. Nó kế thừa lớp trừu tượng Reader.
Cách thức hoạt động của BufferedReader
BufferedReader duy trì một bộ đệm bên trong gồm 8192 ký tự. Trong quá trình đọc trong BufferedReader, một đoạn ký tự được đọc từ đĩa và được lưu trữ trong bộ đệm bên trong. Và từ bộ đệm lưu tạm thời bên trong này, các ký tự sẽ được đọc riêng lẻ. Do đó, số lượng thông tin liên lạc với đĩa sẽ được giảm. Đây là lý do tại sao việc đọc các ký tự nhanh hơn khi sử dụng BufferedReader.
Tạo một BufferedReader
Để tạo BufferedReader, trước tiên chúng ta phải thêm gói java.io.BuferedReader. Sau khi thêm, sau đây là cách chúng ta có thể tạo trình đọc dữ liệu.
1 2 |
FileReader file = new FileReader(String path); BufferedReader buff = new BufferedReader(file); |
Trong ví dụ trên, chúng ta đã tạo một BufferedReader có tên là buff với FileReader có tên là file. Ở đây, bộ đệm bên trong của BufferedReader có kích thước mặc định là 8192 ký tự. Tuy nhiên, chúng ta cũng có thể chỉ định kích thước của bộ đệm bên trong như sau.
1 |
BufferedReader buff = new BufferedReader(file, int size); |
Bộ đệm sẽ giúp đọc các ký tự từ tệp nhanh hơn.
Các phương thức của BufferedReader
Lớp BufferedReader cung cấp các triển khai cho các phương thức khác nhau có trong Reader.
1. Phương thức read()
- Phương thức read(): Đọc một ký tự từ bộ đệm.
- Phương thức read(char [] array): Đọc các ký tự và lưu trữ trong mảng được chỉ định.
- Phương thức read(mảng char [], int start, int length): Đọc số lượng ký tự bằng giá trị của length và lưu trữ trong mảng được chỉ định bắt đầu từ vị trí start.
Ví dụ: Giả sử chúng ta có một tệp tên tek4.txt với nội dung như sau.
1 |
Lap trinh Java can ban |
Chúng ta sẽ đọc nội dung của file này bằng đoạn mã như sau.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.io.FileReader; import java.io.BufferedReader; class Main { public static void main(String[] args) { char[] du_lieu = new char[100]; try { FileReader file = new FileReader("tek4.txt"); BufferedReader buff = new BufferedReader(file); buff.read(du_lieu); System.out.println(du_lieu); buff.close(); } catch(Exception e) { e.getStackTrace(); } } } |
Kết quả:
1 |
Lap trinh Java can ban |
Trong ví dụ trên, chúng ta đã tạo một BufferedReader có tên là buff. BufferedReader được liên kết với tệp tek4.txt.
1 2 |
FileReader file = new FileReader("tek4.txt"); BufferedReader buff = new BufferedReader(file); |
Ở đây, chúng ta đã sử dụng phương thức read() để đọc một mảng ký tự từ bộ đệm bên.
2. Phương thức skip()
Để loại bỏ và bỏ qua số ký tự được chỉ định, chúng ta có thể sử dụng phương thức skip().
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.io.FileReader; import java.io.BufferedReader; public class Main { public static void main(String args[]) { char[] du_lieu = new char[100]; try { FileReader file = new FileReader("tek4.txt"); BufferedReader buff = new BufferedReader(file); buff.skip(10); buff.read(du_lieu); System.out.println(du_lieu); buff.close(); } catch (Exception e) { e.getStackTrace(); } } } |
Kết quả:
1 |
Java can ban |
Trong ví dụ trên, chúng ta đã sử dụng phương thức skip(10) để bỏ qua 10 ký tự ban đầu.
3. Phương thức close()
Để đóng BufferedReader, chúng ta có thể sử dụng phương thức close(). Khi phương thức này được gọi, chúng ta không thể đọc dữ liệu được nữa.
4. Các phương thức khác
Phương thức | Mô tả |
ready() | Kiểm tra xem Reader có thể đọc dữ liệu được hay chưa. |
mark() | Đánh dấu vị trí tại đó mà dữ liệu được đọc đến. |
reset() | Trả về quyền kiểm soát tại điểm mà được đánh dấu vị trí. |
Lớp BufferedWriter
Lớp BufferedWriter của gói java.io có thể được sử dụng với các trình ghi dữ liệu khác để ghi dữ liệu ở dạng ký tự hiệu quả hơn. Nó kế thừa lớp trừu tượng Writer.
Cách thức hoạt động của BufferedWriter
BufferedWriter duy trì một bộ đệm bên trong gồm 8192 ký tự. Trong quá trình ghi, các ký tự được ghi vào trong bộ đệm bên trong thay vì ghi vào trong đĩa. Khi bộ đệm được lấp đầy hoặc trình ghi được đóng, toàn bộ ký tự trong bộ đệm sẽ được ghi vào đĩa. Do đó, số lượng thông tin liên lạc đến đĩa sẽ được giảm. Đây là lý do tại sao việc viết các ký tự nhanh hơn bằng BufferedWriter.
Tạo một BufferedWriter
Để tạo BufferedWriter, trước tiên chúng ta phải thêm gói java.io.BufferedWriter. Sau khi thêm, sau đây là cách chúng ta có thể tạo BufferedWriter.
1 2 |
FileWriter file = new FileWriter(String path); BufferedWriter buff = new BufferedWriter(file); |
Trong ví dụ trên, chúng ta đã tạo một BufferedWriter có tên là buff với FileWriter có tên là file. Ở đây, bộ đệm bên trong của BufferedWriter có kích thước mặc định là 8192 ký tự. Tuy nhiên, chúng ta cũng có thể chỉ định kích thước của bộ đệm bên trong của nó.
1 |
BufferedWriter buffer = new BufferedWriter(file, int size); |
Bộ đệm sẽ giúp việc ghi các ký tự vào tệp hiệu quả hơn.
Các phương thức của BufferedWriter
Lớp BufferedWriter cung cấp các triển khai cho các phương thức khác nhau có trong Writer.
1. Phương thức write()
- Phương thức write(): Ghi một ký tự vào bộ đệm bên trong.
- Phương thức write(char [] array): Ghi các ký tự từ mảng được chỉ định.
- Phương thức write(String data): Ghi chuỗi được chỉ định.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import java.io.FileWriter; import java.io.BufferedWriter; public class Main { public static void main(String args[]) { String du_lieu = "Lap trinh Java can ban"; try { FileWriter file = new FileWriter("tek4.txt"); BufferedWriter buff = new BufferedWriter(file); buff.write(du_lieu); buff.close(); } catch (Exception e) { e.getStackTrace(); } } } |
Kết quả trong tệp tên là tek4.txt:
1 |
Lap trinh Java can ban |
Trong ví dụ trên, chúng ta đã tạo một BufferedWriter có tên là buff cùng với FileWriter có tên là file. BufferedWriter được liên kết với tệp tek4.txt.
1 2 |
FileWriter file = new FileWriter("tek4.txt"); BufferedWriter buff = new BufferedWriter(file); |
Để ghi dữ liệu vào tệp, chúng ta đã sử dụng phương thức write(). Sau khi chúng ta chạy chương trình, tệp tek4.txt chứa nội dung như sau.
1 |
Lap trinh Java can ban |
2. Phương thức flush()
Để xóa bộ đệm bên trong, chúng ta có thể sử dụng phương thức flush(). Phương thức này buộc trình ghi dữ liệu sẽ phải ghi tất cả dữ liệu có trong bộ đệm vào điểm đích (chính là tệp trong trường hợp này).
Ví dụ, giả sử chúng ta có một tệp trống có tên là tek4.txt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.io.FileWriter; import java.io.BufferedWriter; public class Main { public static void main(String[] args) { String du_lieu = "Phuong thuc flush"; try { FileWriter file = new FileWriter("tek4.txt"); BufferedWriter buff = new BufferedWriter(file); buff.write(du_lieu); buff.flush(); buff.close(); } catch(Exception e) { e.getStackTrace(); } } } |
Kết quả trong tệp tek4.txt như sau:
1 |
Phuong thuc flush |
3. Phương thức close()
Để đóng BufferedWriter, chúng ta có thể sử dụng phương thức close(). Khi phương thức này được gọi, chúng ta không thể ghi dữ liệu được nữa.
4. Các phương thức khác
Phương thức | Mô tả |
newLine() | Chèn một ký tự xuống dòng mới vào Writer. |
append() | Chèn một ký tự được chỉnh định vào trình ghi dữ liệu hiện tại. |
Trên đây là khái niệm và ví dụ cơ bản về lớp BufferedReader và BufferedWriter trong Java. Hy vọng mọi người có thể áp dụng vào trong chương trình của mình. Mọi người hãy tiếp tục theo dõi các bài tiếp theo và cập nhật các bài tiếp theo trên tek4 nhé!
P/s: Cảm ơn mọi người!