Heim  >  Artikel  >  Java  >  Vergleichen Sie zwei verschiedene Dateien Zeile für Zeile in Java

Vergleichen Sie zwei verschiedene Dateien Zeile für Zeile in Java

WBOY
WBOYnach vorne
2023-08-23 15:37:081736Durchsuche

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.

Zeigen Sie einige Beispiele

Beispiel 1

Das Bild unten zeigt zwei verschiedene Textdateien mit demselben Inhalt, sodass die Ausgabe zwei Dateien mit demselben Inhalt sein wird.

Vergleichen Sie zwei verschiedene Dateien Zeile für Zeile in Java

Beispiel 2

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

Algorithmus

  • 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.

Mehrere Methoden

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.

Methode 1: Verwenden Sie die BufferedReader-Klasse

Beispiel

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();
   }
}

Ausgabe

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.

Methode 2: Speicherzuordnungsdateien verwenden

Beispiel

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);
      }
   }
}

Ausgabe

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen