Lớp BufferedReader Và BufferedWriter Trong Java - Góc Học IT

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.

  • Dòng (stream) là gì? Tập tin (file) và phân loại tập tin trong lập trình
  • Thread là gì? Cách tạo Thread trong Java
  • Chương trình C++ xuất ra bảng mã ASCII
  • Sửa (update) dữ liệu và câu lệnh drop trong MySQL với Python
  • Khái niệm con trỏ (pointer) và cách khai báo biến con trỏ trong C++
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 >>

Từ khóa » đọc File Trong Java Dụng Bufferedreader