In diesem Artikel vergleichen wir zwei verschiedene im System gespeicherte Textdateien. Wir untersuchen jede Textdatei Zeile für Zeile und können durch den Vergleich Gemeinsamkeiten und Unterschiede erkennen.
Sehen wir uns an, wie man es mit der Programmiersprache Java implementiert.
Das Bild unten zeigt zwei verschiedene Textdateien mit demselben Inhalt, sodass die Ausgabe zwei Dateien mit demselben Inhalt sein wird.
Das Folgende stellt zwei Dateien dar, vorausgesetzt, Datei1.txt und Datei2.txt, und deren Inhalt.
Datei 1.txt
This is amazing. Java Language.
file2.txt
This is amazing. Python Language.
Hier können wir feststellen, dass die beiden Dateien in Zeile 2 unterschiedliche Inhalte haben. Da Datei 1, Zeile 2 „Java-Sprache“ und Datei 2, Zeile 2 „Python-Sprache“ enthält
Schritt 1 − Erstellen Sie „reader1“ und „reader2“ als zwei BufferedReader-Objekte und verwenden Sie sie, um zwei Eingabetextdateien Zeile für Zeile zu lesen.
Schritt 2 – Erstellen Sie zwei Variablen. Erstellen Sie zunächst eine boolesche Variable mit dem Namen „areEqual“ und initialisieren Sie sie auf „true“. Zweitens erstellen Sie eine int-Variable namens „lineNum“ und initialisieren sie auf 1. areEqual ist eine Flag-Variable, die zunächst auf „true“ gesetzt ist und sich in „false“ ändert, wenn sich der Inhalt der Eingabedateien unterscheidet. Die Anzahl der Zeilen wird in lineNum gespeichert.
Schritt 3 – Lesen Sie den Inhalt von Datei 1 in Zeile 1 und den Inhalt von Datei 2 in Zeile 2 ein.
Schritt 4 - Lesen Sie die Zeilen in den Dateien Datei1 und Datei2 in Zeile1 bzw. Zeile2 ein, bis beide Dateien gelesen wurden. Wenn Zeile1 oder Zeile2 leer ist, setzen Sie „areEqual“ auf „false“.
Schritt 5 − Wenn areEqual wahr ist, deklarieren Sie den Inhalt der beiden Dateien als gleich. Wenn der Wert von areEqual falsch ist, sind die Inhalte der deklarierten Dateien unterschiedlich.
Schritt 6 – Schließen Sie die Ressource.
Wir bieten Lösungen auf unterschiedliche Weise.
Durch die Verwendung der BufferedReader-Klasse
Durch die Verwendung von speicherzugeordneten Dateien
Sehen Sie sich die Programme und ihre Ausgabe einzeln an.
In dieser Methode erstellen Sie ein Objekt der Klasse BufferedReader und verwenden die integrierte Methode readLine(), um den Inhalt zweier Dateien zu lesen und zu vergleichen.
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader reader1 = new BufferedReader(new FileReader("E:\file1.txt")); BufferedReader reader2 = new BufferedReader(new FileReader("E:\file2.txt")); String line1 = reader1.readLine(); String line2 = reader2.readLine(); int lineNum = 1; boolean areEqual = true; while (line1 != null || line2 != null){ if(line1 == null || line2 == null){ areEqual = false; break; } else if(! line1.equalsIgnoreCase(line2)) { areEqual = false; break; } line1 = reader1.readLine(); line2 = reader2.readLine(); lineNum++; } if(areEqual){ System.out.println("Both the files have same content"); } else { System.out.println("Both the files have different content"); System.out.println("In both files, there is a difference at line number: "+lineNum); System.out.println("One file has "+line1+" and another file has "+line2+" at line "+lineNum); } reader1.close(); reader2.close(); } }
Both the files have different content In both files, there is a difference at line number: 2 One file has Java Language. and another file has Python Language. at line 2
Hinweis – Das Eingabeszenario hier ähnelt dem oben erläuterten Beispiel 2.
Bei dieser Methode nutzen wir das Konzept der speicherzugeordneten Datei, bei der es sich um ein Kernelobjekt handelt, das die Bytes einer Festplattendatei der Systemspeicheradresse zuordnet. Durch Manipulation des Inhalts der speicherzugeordneten Datei können wir feststellen, ob Die Inhalte sind gleich oder unterschiedlich.
import java.io.File; import java.nio.file.Path; import java.nio.file.Paths; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; public class Main { public static void main(String[] args) { Path path1 = Paths.get("E://file1.txt"); Path path2 = Paths.get("E://file2.txt"); compare(path1,path2); } public static void compare(Path path1, Path path2) { try { RandomAccessFile randomAccessFile1 = new RandomAccessFile(path1.toFile(), "r"); RandomAccessFile randomAccessFile2 = new RandomAccessFile(path2.toFile(), "r"); FileChannel ch1 = randomAccessFile1.getChannel(); FileChannel ch2 = randomAccessFile2.getChannel(); if (ch1.size() != ch2.size()) { System.out.println("Both files have different content"); } long size = ch1.size(); MappedByteBuffer m1 = ch1.map(FileChannel.MapMode.READ_ONLY, 0L, size); MappedByteBuffer m2 = ch2.map(FileChannel.MapMode.READ_ONLY, 0L, size); if (m1.equals(m2)) { System.out.println("Both files have same content"); } } catch(Exception e){ System.out.println(e); } } }
Both files have same content
HINWEIS – hier betrachten wir zwei Dateien, sie haben den gleichen Inhalt.
In diesem Artikel haben wir untersucht, wie man den Inhalt zweier verschiedener Textdateien Zeile für Zeile in Java vergleicht.
Das obige ist der detaillierte Inhalt vonVergleichen Sie zwei verschiedene Dateien Zeile für Zeile in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!