Heim > Java > javaLernprogramm > Hauptteil

Wie lese ich eine Datei in Java in umgekehrter Reihenfolge?

Patricia Arquette
Freigeben: 2024-10-25 06:10:29
Original
232 Leute haben es durchsucht

How to Read a File in Reverse Order in Java?

Eine Datei in umgekehrter Reihenfolge in Java lesen

Problem:

Ich muss eine Datei in umgekehrter Reihenfolge lesen, beginnend mit der letzten Zeile und geht weiter zum Anfang.

Lösung:

Verwenden von Dateien mit wahlfreiem Zugriff und Zeilenscannen

Um eine Datei mit BufferedReader in umgekehrter Reihenfolge zu lesen, können wir Verwenden Sie RandomAccessFile, um den Dateizeiger zu manipulieren und in umgekehrter Reihenfolge nach Zeilenumbrüchen zu suchen.

So können Sie diesen Ansatz in Java implementieren:

<code class="java">import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;

public class ReverseFileReader {

    public static void readAndReverse(String filePath) {
        try {
            // Create a RandomAccessFile instance for the file
            RandomAccessFile file = new RandomAccessFile(filePath, "r");

            // Calculate the file length
            long fileLength = file.length();

            // Create an ArrayList to store the lines of the file
            ArrayList<String> lines = new ArrayList<>();

            // Set the file pointer to the end of the file
            file.seek(fileLength);

            // Scan backwards line by line, starting from the last line
            while (file.getFilePointer() > 0) {
                // Find the previous line break and move the file pointer to that position
                long lineStart = file.getFilePointer();
                while (file.getFilePointer() > 0 && file.readByte() != '\n') {
                    file.seek(file.getFilePointer() - 1);
                }

                // Read the line and add it to the list
                file.seek(lineStart);
                lines.add(file.readLine());
            }

            // Close the file
            file.close();

            // Reverse the order of the lines in the list
            Collections.reverse(lines);

            // Print the lines in reverse order
            for (String line : lines) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        // Specify the file path to be read in reverse order
        String filePath = "/path/to/your/file.txt";

        // Read and reverse the file
        readAndReverse(filePath);
    }
}</code>
Nach dem Login kopieren

Implementierungsdetails:

  • Wir verwenden RandomAccessFile, um den Dateizeiger dynamisch zu bewegen und die Datei in umgekehrter Reihenfolge zu scannen.
  • Wir speichern die Zeilen in einer ArrayList, um ihre ursprüngliche Reihenfolge beizubehalten, und kehren die Liste dann um, bevor wir sie drucken.
  • Die Methode readLine() wird verwendet, um Zeilen von der Position des Dateizeigers in umgekehrter Reihenfolge zu lesen.
  • Durch die Suche nach Zeilenumbrüchen in umgekehrter Reihenfolge lesen wir die Datei effektiv vom Ende bis zum Anfang.

Das obige ist der detaillierte Inhalt vonWie lese ich eine Datei in Java in umgekehrter Reihenfolge?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!