Cách đọc file trong Java sử dụng BufferedInputStream

Để đọc file trong Java bạn có rất nhiều cách để lựa chọn. Trong bài này, mình sẽ hướng dẫn các bạn sử dụng luồng byte để đọc dữ liệu dưới dạng nhị phân. (luồng byte thường sử dụng để đọc dữ liệu kiểu nguyên thủy và kiểu dữ liệu đối tượng)

Cách đọc file trong Java sử dụng BufferedInputStream
Cách để Java đọc dữ liệu khi sử dụng InputStream

Hai class đại diện cho luồng byte ở đây là BufferedInputStream và DataInputStream. Chúng ta sẽ sử dụng chúng thử nhé.

Cách đọc file trong Java sử dụng BufferedInputStream
Vị trí BufferedInputStream và DataInputStream trong cấu trúc class nhập xuất dữ liệu của Java

Ví dụ đọc file trong Java sử dụng BufferedInputStream và DataInputStream

package com.ngockhuong;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class BufferedInputStreamExample {

	public static void main(String[] args) {

		File file = new File("C:\\data.txt");
		FileInputStream fis = null;
		BufferedInputStream bis = null;
		DataInputStream dis = null;

		try {
			// tạo đối tượng luồng và liên kết nguồn dữ liệu
			fis = new FileInputStream(file);

			bis = new BufferedInputStream(fis);
			dis = new DataInputStream(bis);

			// đọc dữ liệu
			while (dis.available() != 0) {
				System.out.println(dis.readLine());
			}

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				// đóng luồng dữ liệu
				// luồng nào mở sau thì đóng trước
				dis.close();
				bis.close();
				fis.close();
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
	}
}

Hướng dẫn là vậy, nhưng mình khuyên các bạn không nên sử dụng cách này để đọc file (đọc dữ liệu kiểu nguyên thủy) mà thay vào đó hãy sử dụng BufferedReader. (Mình đã viết bài Cách đọc file trong Java sử dụng BufferedReader, các bạn có thể tham khảo thêm)

Vì sao?

Phương thức readLine() thuộc lớp DataInputStream đã bị phản đối (phương thức sẽ bị gạch ngang khi code trong IDE) và chính Sun cũng khẳng định điều này.

Cách chữa cháy tạm thời

package com.ngockhuong;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class BufferedInputStreamExample {

	public static void main(String[] args) {

		File file = new File("data.txt");
		FileInputStream fis = null;
		BufferedInputStream bis = null;
		// sử dụng BufferedReader thay thế cho DataInputStream
		BufferedReader br = null;

		try {
			// tạo đối tượng luồng và liên kết nguồn dữ liệu
			fis = new FileInputStream(file);

			bis = new BufferedInputStream(fis);
			br = new BufferedReader(new InputStreamReader(fis));

			String currentLine;
			// đọc dữ liệu
			while ((currentLine = br.readLine()) != null) {
				System.out.println(currentLine);
			}

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				// đóng luồng dữ liệu
				// luồng nào mở sau thì đóng trước
				br.close();
				bis.close();
				fis.close();
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
	}
}

 

0 0 votes
Đánh giá bài viết
Nhận thông báo
Thông báo khi có
guest

0 Bình luận
Phản hồi nội tuyến
Xem tất cả các bình luận