Lớp BufferedReader và BufferedWriter trong Java

Đây là bài 55/62 bài của series môn học Ngôn ngữ lập trình Java

1. Lớp BufferedReader trong Java

Lớp BufferedReader nằm trong package java.io được sử dụng với các lớp Reader khác để giúp đọc dữ liệu là các ký tự (character) hiệu quả hơn. Lớp BufferedReader kế thừa từ lớp abstract Reader.

Lớp BufferedReader gồm có một bộ nhớ đệm (internal buffer) lưu trữ 8192 ký tự. Khi sử dụng BufferedReader, một số lượng nhất định các ký tự được đọc từ nơi lưu trữ (data source) và lưu trữ trong bộ nhớ đệm này. Do đó, số lần truy xuất dữ liệu đến data source giảm đi. Đó là lý do tại sao đọc dữ liệu với BufferedReader hiệu quả hơn..

Tạo một BufferedReader

Để sử dụng BufferedReader, chúng ta phải import java.io.BuferedReader.

//Tạo ra một FileReader
FileReader file = new FileReader(String file);

//Tạo ra một BufferedReader
BufferedReader buffer = new BufferedReader(file);

Trong ví dụ trên, chúng ta tạo ra một đối tượng BufferedReader tên là buffer với một đối tượng FileReader tên là file để giúp đọc dữ liệu hiệu quả hơn.

Bộ nhớ đệm (internal buffer) mặc định của BufferedReader có thể lưu trữ 8192 ký tự. Chúng ta cũng có thể thay đổi kích thước lưu trữ của bộ nhớ đệm với tham số int size.

//Tạo một BufferdReader với tham số int size
BufferedReader buffer = new BufferedReader(file, int size);

Các phương thức của BufferedReader

Phương thức read()

  • read() đọc một ký tự từ internal buffer của reader
  • read(char[] array) đọc các ký tự từ reader và lưu các ký tự này vào mảng array
  • read(char[] array, int start, int length) đọc length ký tự từ reader và lưu trữ vào mảng array tại vị trí start của mảng

Giả sử có một file input.txt trong phân vùng D với nội dung bên dưới.

This is a line of text inside the file.

Chúng ta có thể đọc dữ liệu là các ký tự trong file với BufferedReader.

import java.io.FileReader;
import java.io.BufferedReader;
class Main {
  public static void main(String[] args) {
    //Tạo một array lưu trữ các ký tự
    char[] array = new char[100];
    try {
      //Tạo một FileReader
      FileReader file = new FileReader("D:\\input.txt");
      //Tạo một BufferedReader
      BufferedReader input = new BufferedReader(file);
      //Đọc các ký tự và lưu vào array
      input.read(array);
      System.out.println("Data in the file: ");
      System.out.println(array);
      //Đóng reader
      input.close();
    }
    catch(Exception e) {
      System.err.println(e.getStackTrace());
    }
  }
}
Kết quả
Data in the file: 
This is a line of text inside the file.

Phương thức skip()

Để bỏ qua một số ký tự không cần đọc, chúng ta có thể sử dụng hàm skip().

import java.io.FileReader;
import java.io.BufferedReader;
public class Main {
  public static void main(String args[]) {
    char[] array = new char[100];
    try {
      FileReader file = new FileReader("D:\\input.txt");
      BufferedReader input = new BufferedReader(file);
      //Bỏ qua 5 ký tự
      input.skip(5);
      //Đọc các ký tự và lưu vào array
      input.read(array);
      System.out.println("Data after skipping 5 characters:");
      System.out.println(array);
      input.close();
    }
    catch (Exception e) {
      System.err.println(e.getStackTrace());
    }
  }
}
Kết quả
Data after skipping 5 characters:
is a line of text inside the file.

Trong ví dụ trên, chúng ta đã bỏ qua 5 ký tự ‘T’, ‘h’, ‘i’, ‘s’ và ‘ ‘ không cần đọc.

2. Lớp BufferedWriter trong Java

Lớp BufferedWriter nằm trong package java.io được sử dụng với các lớp Writer khác để giúp ghi dữ liệu là các ký tự (character) hiệu quả hơn. Lớp BufferedWriter kế thừa từ lớp abstract Writer.

Lớp BufferedWriter có sử dụng bộ nhớ đệm (internal buffer) có khả năng lưu trữ 8192 ký tự. Khi sử dụng lớp BufferedWriter các ký tự sẽ được ghi vào internal buffer thay vì ghi ngay lập tức vào nơi cần lưu trữ (data destination). Khi internal buffer đã đầy hoặc Writer đóng thì tất cả các ký tự sẽ được ghi vào data destination. Vì thế, số lần ghi vào data destination sẽ giảm. Điều đó giải thích vì sao BufferedWriter giúp ghi dữ liệu hiệu quả hơn.

Tạo một BufferedWriter

Để sử dụng BufferedWriter, chúng ta phải import java.io.BufferedWriter.

//Tạo một FileWriter
FileWriter file = new FileWriter(String name);

//Tạo một BufferedWriter
BufferedWriter buffer = new BufferedWriter(file);

Trong ví dụ trên, chúng ta tạo ra một đối tượng BufferedWriter tên là buffer với một đối tượng FileWriter tên là file để giúp ghi dữ liệu hiệu quả hơn. Bộ nhớ đệm (internal buffer) mặc định của BufferedWriter có thể lưu trữ 8192 ký tự. Chúng ta cũng có thể thay đổi kích thước lưu trữ của bộ nhớ đệm với tham số int size.

//Tạo một BufferedWriter với tham số int size
BufferedWriter buffer = new BufferedWriter(file, int size);

Các phương thức của BufferedWriter

Phương thức write()

  • write() ghi một ký tự vào internal buffer của writer
  • write(char[] array) ghi các ký tự của mảng array vào writer
  • write(String data) ghi chuỗi String data vào writer
import java.io.FileWriter;
import java.io.BufferedWriter;
public class Main {
  public static void main(String args[]) {
    String data = "This is the data in the output file";
    try {
      //Tạo một FileWriter
      FileWriter file = new FileWriter("D:\\output.txt");
      //Tạo một BufferedWriter
      BufferedWriter output = new BufferedWriter(file);
      //Ghi string vào file
      output.write(data);
      //Đóng writer
      output.close();
    }
    catch (Exception e) {
      System.err.println(e.getStackTrace());
    }
  }
}

Chương trình trên sẽ ghi dữ liệu String data = "This is the data in the output file."; vào file D:\\output.txt.

Phương thức flush()

Để xóa internal buffer, chúng ta có thể sử dụng hamf flush(). Hàm này bắt buộc ghi tất cả dữ liệu trong buffer và data destination.

import java.io.FileWriter;
import java.io.BufferedWriter;
public class Main {
  public static void main(String[] args) {
    String data = "This is a demo of the flush method";
    try {
      FileWriter file = new FileWriter("D:\\flush.txt");
      BufferedWriter output = new BufferedWriter(file);
      output.write(data);
      //ghi tất cả dữ liệu vào data destination
      output.flush();
      System.out.println("Data is flushed to the file.");
      output.close();
    }
    catch(Exception e) {
      System.err.println(e.getStackTrace());
    }
  }
}

Khi không sử dụng BufferedWriter hoặc BufferedReader nữa thì các bạn nhớ sử dụng hàm close() để đóng kết nối với output stream và input stream.

5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Lớp FileReader và FileWriter trong JavaLớp StringReader và StringWriter trong Java >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.