Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách đọc file .txt bằng RandomAccessFile trong Java

java.io.RandomAccessFile cho phép đọc/ghi tại vị trí bất kỳ trong file (random access), khác với stream tuần tự. Dùng con trỏ file pointer (getFilePointer(), seek()).

Đọc file txt với readLine()

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFileExample {
    public static void main(String args[]) throws IOException {
        String filePath = "D://input.txt";
        
        File file = new File(filePath);
        StringBuffer buffer = new StringBuffer();
        
        // "rw" = read-write mode
        RandomAccessFile raFile = new RandomAccessFile(file, "rw");
        
        // Đọc từng dòng cho đến hết file
        while (raFile.getFilePointer() < raFile.length()) {
            buffer.append(raFile.readLine()).append(System.lineSeparator());
        }
        
        String contents = buffer.toString();
        System.out.println("Nội dung file:\n" + contents);
        
        raFile.close();
    }
}

Kết quả

Nội dung file:
Tutorials Point originated from the idea that there exists a class of readers...
Enjoy the free content

Các mode mở file

ModeÝ nghĩa
"r"Read-only
"rw"Read-write
"rws"Read-write + sync metadata (chậm)
"rwd"Read-write + sync data (chậm)

Ưu điểm RandomAccessFile

  • Đọc/ghi ngẫu nhiên: seek(pos) nhảy đến byte bất kỳ.
  • Hỗ trợ cả read và write trong 1 object.
  • Phù hợp: file lớn, database nhúng, tìm kiếm nhị phân (binary search) trong file đã sort.

So sánh với Scanner/BufferedReader

Đặc điểmRandomAccessFileScanner/BufferedReader
Truy cập ngẫu nhiênCó (seek)Không (sequential)
Ghi fileCóKhông (cần FileWriter)
Đọc dòngreadLine()nextLine()/readLine()
Hiệu suất file lớnTốt (nhảy trực tiếp)Phải đọc tuần tự