.:: CODE SNIPPET ::.

"Your time is limited, so don't waste it living someone else's life"

Sử dụng BuffferedReader và Scanner để đọc dữ liệu từ file


Có nhiều cách để đọc dữ liệu từng dòng từ file trong Java. Cách dễ nhất là sử dụng BufferedReader, nó cung cấp hàm readLine() để đọc dữ liệu từ file. Bên cạnh đó, Java 1.5 cũng giới thiệu nhiều lớp tiện ích mới, trong đó có lớp Scanner mà bạn có thể dùng để đọc dữ liệu từ file khá là thuận tiện. Mặc dù BufferedReader ra đời trong JDK 1.1, nhưng lớp Scanner cung cấp nhiều hàm tiện ích hơn BufferedReader. Scanner có các hàm như hasNextLine() và nextLine() rất thuận tiện cho việc đọc dữ liệu dòng từng dòng trong Java. Hàm nextLine() trả về chuỗi cũng như readLine(), nhưng lớp Scanner có các hàm khác như nextInt(), nextLong() mà bạn có thể dùng để đọc dữ liệu lên các biến Int, Long,…mà không cần phải chuyển đổi kiểu dữ liệu nữa.
Đọc dữ liệu từng dòng từ file trong Java sử dụng BufferedReader
Trong ví dụ này, chúng ta sử dụng lớp BufferedReader để đọc dữ liệu từ file. BufferedReader cần dùng một InputStream mà cụ thể là dùng FileInputStream để mở file và đọc dữ liệu.

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;

/**
 *
 * @author PRMHUITEDU
 */
public class TestBasicJava {
    public static void main(String args[]) throws IOException {

        //reading file line by line in Java using BufferedReader
        FileInputStream fis = null;
        BufferedReader reader = null;

        try {
            fis = new FileInputStream("C:/sample.txt");
            reader = new BufferedReader(new InputStreamReader(fis));

            System.out.println("Reading File line by line using BufferedReader");

            String line = reader.readLine();
            while(line != null){
                System.out.println(line);
                line = reader.readLine();
            }

        } catch (FileNotFoundException ex) {
            Logger.getLogger(BufferedReaderExample.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(BufferedReaderExample.class.getName()).log(Level.SEVERE, null, ex);

        } finally {
            try {
                reader.close();
                fis.close();
            } catch (IOException ex) {
                Logger.getLogger(BufferedReaderExample.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
  }
}

Khi sử dụng FileInputStream hoặc IOReader đừng quên đóng stream trong đoạn finally để file descriptor được giải phóng. Nếu bạn không đóng thì có thể gây lỗi cho file descriptor, và trong trường hợp xấu nhất thì nó không thể đọc thêm một file mới nào nữa. Nếu bạn sử dụng Java 7 thì bạn có thể sử dụng tính năng tự quản lý tài nguyên để giải phóng tài nguyên cách tự động.
Đọc dữ liệu từ file từng dòng sử dụng Scanner
Scanner có thể đọc file từ InputStream:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

/**
 *
 * @author PRMHUITEDU
 */
public class TestBasicJava {
    public static void main(String args[]) throws FileNotFoundException  {

       //Scanner Example - read file line by line in Java using Scanner
        FileInputStream fis = new FileInputStream("C:/sample.txt");
        Scanner scanner = new Scanner(fis);

        //reading file line by line using Scanner in Java
        System.out.println("Reading file line by line in Java using Scanner");

        while(scanner.hasNextLine()){
            System.out.println(scanner.nextLine());
        }

        scanner.close();
    }
}

Trông có vẻ code khi sử dụng Scanner thì rõ ràng ơn và dễ dàng hơn vì nó có nhiều hàm hổ trợ hơn. Tùy các bạn sử dụng nhé

Advertisements

5 responses to “Sử dụng BuffferedReader và Scanner để đọc dữ liệu từ file

  1. nguyenvanquan7826 May 15, 2013 at 5:05 PM

    Cho em hỏi, em muốn đọc từng dòng, trong mỗi dòng có tên, tuổi, điểm thi cách nhau bởi dấu phẩy thì làm thế nào ạ?

  2. Hoàng Minh May 15, 2013 at 10:38 PM

    Trường hợp này, thì bạn có thể đọc từng dòng tương tự như trên, sau đó bạn xử lý với mỗi dòng để tách dữ liệu ra nhé.

  3. Nguyen NVC (@atinvc) March 16, 2015 at 1:54 AM

    Bài viết hay
    Thanks anh!

  4. Hùng November 2, 2015 at 4:24 PM

    Chào anh chị! Anh chị cho em hỏi tý: Em muốn đọc 2 tệp tin từ máy tính, trong tệp tin gồm các tính từ, em muốn đọc các tính từ thì làm sao anh chị giúp? thanks

  5. Minh Trần November 2, 2015 at 8:06 PM

    Tính từ là sao Hùng? Máy tính thì nó đâu có hiểu cái nào là tính từ hay danh từ? Có thể nói rõ hơn về yêu cầu ko Hùng

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: