Học Dùng BufferedReader trong Java qua ví dụ

Ngày đăng: 16/06/2020   -    Cập nhật: 16/06/2020
Sau một thời gian dài học Java, có bao giờ bạn thắc mắc rằng khi làm việc với dữ liệu trong Java, có phương thức nào thể đọc và hiểu nội dung dữ liệu đã được lưu trong file đó một cách đơn giản hay không?


Câu trả lời là có, thậm chí là rất nhiều phương thức có thể làm điều đó dễ dàng.


BufferedReader chính là một trong những phương thức làm rất tốt điều đó.


Nếu là người mới bắt đầu, thì sau bài viết này có lẽ bạn sẽ thích sử dụng BufferedReader trong Java.



1. BufferedReader trong Java là gì?



BufferedReader trong Java

BufferedReader trong Java


BufferedReader là một lớp Java để đọc văn bản từ luồng đầu vào (như tệp) bằng cách đệm và đọc liền mạch các ký tự, mảng hoặc dòng.


Nói chung, mỗi yêu cầu đọc được tạo bởi Reader sẽ khiến yêu cầu đọc tương ứng được tạo từ ký tự hoặc luồng byte bên dưới.


Do đó, nên bọc BufferedReader xung quanh bất kỳ Reader nào có phương thức read(), chẳng hạn như java FileReaders và InputStreamReaders.


Một cách sử dụng thông thường sẽ liên quan đến việc chuyển đường dẫn tệp tới BufferedReader.



2. Các phương thức BufferedReader trong Java



Để làm việc với BufferedReader trong Java chúng ta có nhiều phương thức:


  • void close(): Đóng luồng và giải phóng bất kỳ tài nguyên hệ thống nào được liên kết với nó
  • void mark(int readAheadLimit): Đánh dấu vị trí hiện tại trong luồng. Các lời gọi tiếp theo đến reset() sẽ cố gắng định vị lại luồng đến điểm này.
  • boolean markSupported(): Nó được sử dụng để kiểm tra input stream có hỗ trợ các phương thức mark() và reset() không.
  • int read(): Đọc một ký tự duy nhất.
  • int read(char[] cbuf, int off, int len): Đọc các phần tử của một mảng.


Phương thức này thực hiện cùng với phương thức Reader tương ứng của lớp Reader.


Để thuận tiện hơn, nó cố gắng đọc càng nhiều ký tự càng tốt bằng cách gọi liên tục phương thức đọc của luồng bên dưới.


Việc đọc này tiếp tục cho đến khi một trong các điều kiện sau trở thành đúng:



  • Số lượng ký tự được chỉ định đã được đọc.
  • Phương thức đọc của luồng cơ bản trả về -1, biểu thị phần cuối của tệp
  • Hoặc phương thức sẵn sàng của luồng cơ bản trả về false, chỉ ra rằng các yêu cầu đầu vào tiếp theo sẽ chặn.


Nếu lần đọc đầu tiên trên luồng cơ bản trả về -1 để biểu thị phần cuối của tệp thì phương thức này trả về -1. Nếu không, phương thức này trả về số lượng ký tự thực sự đọc.


  • String readLine(): Nó được sử dụng để đọc một dòng văn bản.
  • boolean ready(): Cho biết liệu luồng này đã sẵn sàng để được đọc.
  • void reset(): Nó định vị lại stream tại vị trí mà phương thức đánh dấu lần cuối được gọi vào input stream này.
  • long skip(long n): Bỏ qua kí tự nào đó.


3. Cách làm việc với BufferedReader trong Java



Khi sử dụng class BufferedReader trong Java để đọc nội dung một file text thì chúng ta có hai cách khác nhau đó là sử dụng phương thức readLine() hoặc read() của class này.


Trong bài viết này chúng ta sẽ tìm hiểu cách làm chi tiết của từng phương pháp với việc áp dụng vào đọc một file từ máy tính.


Thư mục mình lưu file nguồn chính là: ‪F:\\content-niit\\file-content.txt với nội dụng như sau:




"Tôi muốn tắt nắng đi
Cho màu đừng nhạt mất
Tôi muốn buộc gió lại
Cho hương đừng bay đi"
 
(Vội vàng - Xuân Diệu)
 


3.1. Đọc File với BufferedReader và read()



Để đọc file với BufferedReader thì đầu tiên chúng ta sẽ nghĩ đến phương thức read(). Bây giờ, chúng ta sẽ sử dụng nó để đọc file text trên.



// Import package cần thiết
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class WithRead {
    public static void main(String[] argsthrows IOException {

        FileReader fr = new FileReader("F:\\content-niit\\file-content.txt");
        BufferedReader br = new BufferedReader(fr);

        int i;
        while ((i = br.read()) != -1) {
            System.out.print((char) i);
        }
        br.close();
        fr.close();
    }
}
 


 
Khi gọi br.read(), Java sẽ trả về từng các số mã hoá của từng ký tự thay vì nội dung cả dòng như cách sử dụng redline().


Chúng ta nên sử dụng vòng lặp while để đọc ra từng số mã hoá ký tự này và sau đó chuyển hoá về dạng ký tự chữ.



3.2. Đọc File với BufferedReader và readline()

 

Tiếp theo, chúng ta sẽ sử dụng phương thức readline() để đọc từng dòng văn bản.



// Import package cần thiết
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

public class WithReadline {
    public static void main(String args[]) throws IOException {

        String url = "F:\\content-niit\\file-content.txt";

        // Đọc dữ liệu theo từng dòng với BufferedReader
        FileInputStream fileInputStream = null;
        BufferedReader bufferedReader = null;

        try {
            fileInputStream = new FileInputStream(url);
            bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
            String line = bufferedReader.readLine();
            while (line != null) {
                System.out.println(line);
                line = bufferedReader.readLine();
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ReadFileWithBufferedReader.class.getName()).log(Level.SEVEREnull, ex);
        } catch (IOException ex) {
            Logger.getLogger(ReadFileWithBufferedReader.class.getName()).log(Level.SEVEREnull, ex);
        } finally {
            try {
                bufferedReader.close();
                fileInputStream.close();
            } catch (IOException ex) {
                Logger.getLogger(ReadFileWithBufferedReader.class.getName()).log(Level.SEVEREnull, ex);
            }
        }
    }
}
 


Hai phương pháp đọc File trên hiện đang là hai phương pháp thông dụng nhất của lớp BufferedReader.


Bên cạnh đó, BufferedReader còn hỗ trợ làm việc với File chứa mảng hay kí tự và thậm chí là giới hạn luôn cả số kí tự nữa.


Hãy thử thay đôi nội dụng file theo mục đích cần đọc và thử đoạn code mẫu sau:




Reader reader = new BufferedReader(new FileReader("F:\\content-niit\\file-content.txt"));

char[] theChars = new char[128];

int charsRead = reader.read(theChars, 0theChars.length);
while(charsRead != -1) {
    System.out.println(new String(theChars, 0, charsRead));
    charsRead = reader.read(theChars, 0theChars.length);
}
 

 
Phương thức read(char [], offset, length) trả về số lượng ký tự được đọc vào mảng char hoặc -1 nếu không có thêm ký tự nào để đọc trong BufferedReader.


Bên trên chỉ là một ít tính năng cơ bản của lớp BufferedReader mang lại mà thôi.


Để làm việc và sử dụng hết các tính năng của nó bạn cần một thời gian dài để học cũng như có những đoạn code thực nghiệm mới thì mới khai phá được những gì tinh tú nhất của BufferedReader.


BufferedReader chẳng khác nào là bản nâng cấp tuyệt vời từ Scanner cả. Bạn không cần phải nhập và làm việc với dữ liệu trên các màn hình console nữa.


Hãy dành một chút thời gian quý báo để tìm hiểu thật kỹ về BufferedReader, khi làm việc trong môi trường không phải là học căn bản nữa bạn sẽ thấy được tầm quan trọng của BufferedReader.


Với hàng khối dữ liệu cần xử lí được lưu trong các file có sẵn, bạn sẽ không bỡ ngỡ và có ngay cho mình một giải pháp đơn giản mà hiệu quả, không thứ gì khác chỉ có thể là BufferedReader trong Java.



> Đọc thêm: Try catch trong Java


---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Dạy học Lập trình chất lượng cao (Since 2002). Học làm Lập trình viên. Hành động ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543 - 0353655150 
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
 
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python
Bình luận Facebook
Mục lục
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!