Tổng Hợp Cách đọc File Text Trong Java - Deft Blog
Có thể bạn quan tâm
Mục lục
- 1 Đọc file text với FileInputStream
- 1.1 Ví dụ 1: Đọc từng ký tự trong file text với FileInputStream
- 1.2 Ví dụ 2: Đọc một mảng ký tự trong file text với FileInputStream
- 2 Ví dụ 3: Đọc tất cả nội dung file vào mảng với FileInputStream
- 2.1 Ví dụ 4: Đọc từng dòng trong file text với FileInputStream
- 3 Đọc file text với BufferedInputStream
- 3.1 Ví dụ 1: Đọc từng ký tự trong file text với BufferedInputStream
- 3.2 Ví dụ 2: Đọc một mảng ký tự trong file text với BufferedInputStream
- 3.3 Ví dụ 3: Đọc từng dòng trong file text với BufferedInputStream
- 4 Đọc file text với FileReader
- 4.1 Ví dụ 1: Đọc từng ký tự trong file text với FileReader
- 4.2 Ví dụ 2: Đọc một mảng các ký tự trong FileReader
- 4.3 Ví dụ 3: Đọc từng dòng trong FileReader
- 5 Đọc file text sử dụng BufferedReader
- 5.1 Ví dụ 1: Đọc từng ký tự trong file text với BufferedReader
- 5.2 Ví dụ 2: Đọc từng dòng trong file text với BufferedReader
- 6 Tóm lược
Chúng ta có rất nhiều cách để đọc một file text trong java. Chúng ta có thể sử dụng hầu hết các subclass của InputStream như FileInputStream, BufferedInputStream, ObjectInputStream etc hoặc các subclass của InputStreamReader như FileReader, BufferedReader etc.
Dưới đây mình sẽ tổng hợp một số cách thường được sử dụng để tối ưu tốc độ đọc file nhờ các kỹ thuật bên dưới của chúng.
Đọc file text với FileInputStream
FileInputStream đọc dữ liệu theo luồng byte có thứ tự. Chúng ta có thể chuyển dữ liệu kiểu byte sang char để được văn bản trong file text.
Ví dụ 1: Đọc từng ký tự trong file text với FileInputStream
import java.io.FileInputStream; import java.io.IOException; class ReadFile { public static void main(String args[]) { FileInputStream fin = null; try { fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt"); System.out.println("FileContents :"); //read characters from FileInputStream and write them int ch; while ((ch = fin.read()) != -1) System.out.print((char) ch); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fin != null) fin.close(); } catch (IOException e) { e.printStackTrace(); } } } }Ví dụ 2: Đọc một mảng ký tự trong file text với FileInputStream
import java.io.FileInputStream; import java.io.IOException; class ReadFile { public static void main(String args[]) { FileInputStream fin = null; try { fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt"); System.out.println("FileContents :"); //read characters from FileInputStream and write them byte[] bytes = new byte[5]; // So byte doc duoc tu FileInputStream int bytesReaded = fin.read(bytes); while (bytesReaded != -1) { for (int i = 0; i < bytesReaded; i++) { System.out.print((char) bytes[i]); } bytesReaded = fin.read(bytes); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (fin != null) fin.close(); } catch (IOException e) { e.printStackTrace(); } } } }Ví dụ 3: Đọc tất cả nội dung file vào mảng với FileInputStream
Note: Lưu ý nếu dữ liệu file quá lớn thì chúng ta nên đọc từng ký tự hoặc một mảng ký tự với kích thước vừa phải để tránh tràn bộ nhớ
import java.io.FileInputStream; import java.io.IOException; class ReadFile { public static void main(String args[]) { FileInputStream fin = null; try { fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt"); System.out.println("FileContents :"); //read characters from FileInputStream and write them byte[] bytes = new byte[fin.available()]; fin.read(bytes); for (byte b : bytes) System.out.print((char) b); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fin != null) fin.close(); } catch (IOException e) { e.printStackTrace(); } } } }Ví dụ 4: Đọc từng dòng trong file text với FileInputStream
import java.io.FileInputStream; import java.io.IOException; class ReadFile { public static void main(String args[]) { FileInputStream fin = null; try { fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt"); int data = fin.read(); StringBuilder line = new StringBuilder(); while (data != -1) { if (((char) data == '\n') || ((char) data == '\r')) { System.out.println("New line: " + line.toString()); line.delete(0, line.length()); data = fin.read(); continue; } line.append((char) data); data = fin.read(); } System.out.println("New line: " + line.toString()); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fin != null) fin.close(); } catch (IOException e) { e.printStackTrace(); } } } }Đọc file text với BufferedInputStream
BufferedInputStream tăng tốc độ đọc file với cơ chế sử dụng bộ nhớ đệm. BufferedInputStream sẽ đọc một khối dữ liệu vào bộ nhớ đệm của nó, khi chúng ta tiến hành đọc dữ liệu thì nó sẽ lấy từ bộ nhớ đệm để trả về. Kỹ thuật này giúp giảm đáng kể các thao tác I/O.
Ví dụ 1: Đọc từng ký tự trong file text với BufferedInputStream
import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; class BufferedInputStreamDemo { public static void main(String args[]) { FileInputStream fin = null; try { fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt"); BufferedInputStream bin = new BufferedInputStream(fin); int ch; while ((ch = bin.read()) != -1) System.out.print((char) ch); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fin != null) fin.close(); } catch (IOException e) { e.printStackTrace(); } } } }Ví dụ 2: Đọc một mảng ký tự trong file text với BufferedInputStream
import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; class ReadFile { public static void main(String args[]) { FileInputStream fin = null; try { fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt"); BufferedInputStream bis = new BufferedInputStream(fin); System.out.println("FileContents :"); //read characters from FileInputStream and write them byte[] bytes = new byte[5]; // So byte doc duoc tu FileInputStream int bytesReaded = bis.read(bytes); while (bytesReaded != -1) { for (int i = 0; i < bytesReaded; i++) { System.out.print((char) bytes[i]); } bytesReaded = bis.read(bytes); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (fin != null) fin.close(); } catch (IOException e) { e.printStackTrace(); } } } }Ví dụ 3: Đọc từng dòng trong file text với BufferedInputStream
import java.io.*; class ReadFile { public static void main(String args[]) { FileInputStream fin = null; try { fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt"); BufferedInputStream bis = new BufferedInputStream(fin); int data = bis.read(); StringBuilder line = new StringBuilder(); while (data != -1) { if (((char) data == '\n') || ((char) data == '\r')) { System.out.println("New line: " + line.toString()); line.delete(0, line.length()); data = bis.read(); continue; } line.append((char) data); data = bis.read(); } System.out.println("New line: " + line.toString()); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fin != null) fin.close(); } catch (IOException e) { e.printStackTrace(); } } } }Đọc file text với FileReader
FileReader đọc dữ liệu theo luồng ký tự vì vậy FileReader được khuyến khích sử dụng hơn FileInputStream khi đọc các file text.
Ví dụ 1: Đọc từng ký tự trong file text với FileReader
import java.io.File; import java.io.FileReader; class FileReaderReadExample { public static void main(String[] args) { File file = null; FileReader reader = null; try { file = new File("/Users/nguyenthanhhai/Desktop/test.txt"); reader = new FileReader(file); int i; while ((i = reader.read()) != -1) { System.out.print((char) i); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (reader != null) { reader.close(); } } catch (Exception e2) { e2.printStackTrace(); } } } }Ví dụ 2: Đọc một mảng các ký tự trong FileReader
import java.io.File; import java.io.FileReader; class ReadFileUsingFileReader { public static void main(String[] args) { File file = new File("/Users/nguyenthanhhai/Desktop/test.txt"); try (FileReader reader = new FileReader(file)){ char[] cs = new char[5]; int bytes = reader.read(cs); while (bytes != -1) { for (int i = 0; i < bytes; i++) { System.out.print(cs[i]); } bytes = reader.read(cs); } } catch (Exception e) { e.printStackTrace(); } } }Ví dụ 3: Đọc từng dòng trong FileReader
import java.io.FileReader; import java.io.IOException; class ReadFile { public static void main(String args[]) { try (FileReader fin = new FileReader("/Users/nguyenthanhhai/Desktop/test.txt")) { int data = fin.read(); StringBuilder line = new StringBuilder(); while (data != -1) { if (((char)data == '\n') || ((char)data == '\r')) { System.out.println("New line: " + line.toString()); line.delete(0, line.length()); data = fin.read(); continue; } line.append((char)data); data = fin.read(); } System.out.println("New line: " + line.toString()); } catch (IOException e) { e.printStackTrace(); } } }Đọc file text sử dụng BufferedReader
Sử dụng BufferedReader với FileReader nhầm tối ưu tốc độ đọc file với cơ chế sử dụng bộ nhớ đệm. Trong đa số trường hợp chúng ta nên sử dụng BufferedReader với FileReader.
Ví dụ 1: Đọc từng ký tự trong file text với BufferedReader
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; class BufferedReaderExample { public static void main(String[] args) { try (BufferedReader bufferedReader = new BufferedReader(new FileReader("/Users/nguyenthanhhai/Desktop/test.txt"))) { int data = bufferedReader.read(); while (data != -1) { System.out.print((char) data); data = bufferedReader.read(); } } catch (IOException e) { e.printStackTrace(); } } }Ví dụ 2: Đọc từng dòng trong file text với BufferedReader
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; class BufferedReaderExample { public static void main(String[] args) { try (BufferedReader bufferedReader = new BufferedReader(new FileReader("/Users/nguyenthanhhai/Desktop/test.txt"))) { String line = bufferedReader.readLine(); while (line != null) { System.out.println(line); line = bufferedReader.readLine(); } } catch (IOException e) { e.printStackTrace(); } } }Tóm lược
Chúng ta có rất nhiều cách để đọc một file text. Thế nhưng mỗi cách có một ưu nhược điểm khác nhau. Mình thì thường sử dụng BufferedReader để đọc file text vì nó vừa tối ưu để đọc file text mà lại còn có cơ chế sử dụng bộ nhớ đệm để tăng tốc độ độc ghi file.
Từ khóa » đọc File Text Java
-
3 Cách đọc File Trong Java Phổ Biến Nhất - NIIT - ICT Hà Nội
-
Cách đọc Ghi File Trong Java - Lập Trình Không Khó
-
Đọc Ghi File Trong Java - Học Java Miễn Phí Hay Nhất - VietTuts
-
Cách đọc File Trong Java
-
Hướng Dẫn Đọc File Text Trong Java Sử Dụng "BufferedReader"
-
Java - Bài 26: Đọc Dữ Liệu Từ File Với Scanner - YouTube
-
Làm Việc Với File Trong Java
-
Đọc File Trong Java - Lập Trình Từ Đầu
-
Các Phương Pháp đọc/ghi Tệp Dữ Liệu Khác Nhau Trong Java - FUNiX
-
Hỏi Cách đọc File Text Java Có Từ Khóa để Dừng, - Programming
-
Code Java Cơ Bản Về Thao Tác Với File Text - CodeGym
-
Đọc Dữ Liệu Từng Dòng Từ File Trong Java Sử Dụng BufferedReader
-
Làm Việc Với Text File | Võ Văn Hải's Blog
-
Reading A Plain Text File In Java - Stack Overflow