


Bagaimana untuk Mendapatkan Kembali Baris Terakhir Fail Teks di Java dengan Cekap?
Mengambil Baris Terakhir Fail Teks dalam Java dengan Cekap
Membaca baris terakhir fail teks besar boleh menjadi tugas yang mencabar, terutamanya apabila cuba mengelakkan pemuatan keseluruhan fail ke dalam ingatan. Artikel ini meneroka dua kaedah cekap yang menyelesaikan tugas ini tanpa memerlukan traversal melalui keseluruhan fail.
Kaedah 1: Tailing the File
Kaedah pertama, dikenali sebagai "tailing ," melibatkan kedudukan pada penghujung fail dan mengulang aksara mengikut aksara, merakam aksara sehingga pemisah baris ditemui. Pendekatan ini cekap kerana ia hanya memerlukan pemprosesan sebahagian daripada fail. Fungsi Java berikut melaksanakan kaedah ini:
public String tail(File file) { try (RandomAccessFile fileHandler = new RandomAccessFile(file, "r")) { long fileLength = fileHandler.length() - 1; StringBuilder sb = new StringBuilder(); for (long filePointer = fileLength; filePointer != -1; filePointer--) { fileHandler.seek(filePointer); int readByte = fileHandler.readByte(); if (readByte == 0xA) { // line break (LF) if (filePointer == fileLength) { continue; } break; } else if (readByte == 0xD) { // carriage return (CR) if (filePointer == fileLength - 1) { continue; } break; } sb.append((char) readByte); } String lastLine = sb.reverse().toString(); return lastLine; } catch (Exception e) { e.printStackTrace(); return null; } }
Kaedah 2: Tailing N Lines
Kaedah kedua memanjangkan yang pertama dengan mengembalikan N baris terakhir fail . Ia beroperasi sama dengan kaedah tailing tetapi mengira pemisah baris untuk menentukan bilangan baris yang dikehendaki untuk diambil. Fungsi Java berikut melaksanakan kaedah ini:
public String tail2(File file, int lines) { try (RandomAccessFile fileHandler = new RandomAccessFile(file, "r")) { long fileLength = fileHandler.length() - 1; StringBuilder sb = new StringBuilder(); int lineCount = 0; for (long filePointer = fileLength; filePointer != -1; filePointer--) { fileHandler.seek(filePointer); int readByte = fileHandler.readByte(); if (readByte == 0xA) { // line break (LF) if (filePointer < fileLength) { lineCount++; } } else if (readByte == 0xD) { // carriage return (CR) if (filePointer < fileLength - 1) { lineCount++; } } if (lineCount >= lines) { break; } sb.append((char) readByte); } String lastLines = sb.reverse().toString(); return lastLines; } catch (Exception e) { e.printStackTrace(); return null; } }
Penggunaan
Kaedah ini boleh digunakan untuk mendapatkan semula baris terakhir atau N baris terakhir fail teks besar . Sebagai contoh, pertimbangkan penggunaan berikut:
File file = new File("D:\stuff\huge.log"); System.out.println(tail(file)); System.out.println(tail2(file, 10));
Awas
Perhatikan bahawa pendekatan ini mungkin tidak mengendalikan semua aksara unikod dengan betul kerana pembalikan aksara majmuk semasa pembalikan . Rujuk artikel yang dipautkan untuk mendapatkan maklumat lanjut tentang potensi isu ini.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kembali Baris Terakhir Fail Teks di Java dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?

Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru

Iceberg: Masa Depan Jadual Data Tasik

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?

Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?
