Để đọ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)
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é.
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(); } } } }