首頁  >  文章  >  Java  >  在Java中逐行比較兩個不同的文件

在Java中逐行比較兩個不同的文件

WBOY
WBOY轉載
2023-08-23 15:37:081737瀏覽

在本文中,我們將比較系統中儲存的兩個不同的文字檔案。我們會逐行檢查每個文字文件,透過比較我們可以找出異同。

讓我們來看看如何使用Java程式語言來實作它。

向您展示一些實例

實例1

下圖描繪了兩個具有相同內容的不同文字文件,因此輸出將是兩個具有相同內容的文件。

在Java中逐行比較兩個不同的文件

實例2

下面表示兩個文件,假設是file1.txt和file2.txt,以及它們的內容。

檔1.txt

#
This is amazing.
Java Language.

file2.txt

#
This is amazing.
Python Language.

在這裡,我們可以注意到兩個檔案在第 2 行有不同的內容。由於檔案 1,第 2 行包含“Java 語言”,檔案 2,第 2 行包含“Python 語言”

演算法

  • 步驟 1 − 建立reader1和reader2作為兩個BufferedReader對象,並使用它們逐行讀取兩個輸入文字檔案。

  • 第 2 步 - 建立兩個變數。首先,建立一個名為「areEqual」的布林變數並將其初始化為 true。其次,建立一個名為「lineNum」的 int 變數並將其初始化為 1。 areEqual 是一個標誌變量,最初設定為 true,當輸入檔案的內容不同時更改為 false。行數將保存在 lineNum 中。

  • 步驟 3 - 將檔案 1 的內容讀入第 1 行,將檔案 2 的內容讀入第 2 行。

  • 第四步 - 將檔案file1和file2中的行分別讀入line1和line2,直到兩個檔案都被讀取完畢。如果line1或line2為空,則將"areEqual"設為false。

  • 步驟 5 − 如果 areEqual 為真,則宣告兩個檔案的內容相同。如果 areEqual 的值為假,則聲明文件的內容不同。

  • 第 6 步 - 關閉資源。

多種方法

我們透過不同的方式提供了解決方案。

  • 透過使用 BufferedReader 類別

  • 透過使用記憶體映射檔案

#逐一查看程式及其輸出。

方法 1:使用 BufferedReader 類別

範例

在這個方法中,您將建立BufferedReader類別的對象,並使用內建的readLine()方法讀取兩個檔案的內容並進行比較。

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

注意 - 這裡的輸入場景類似上面解釋的實例2。

方法 2:使用記憶體映射檔案

範例

在這種方法中,我們將利用記憶體映射檔案的概念,這是一個將磁碟檔案的位元組映射到系統記憶體位址的內核對象,透過操作記憶體映射檔案的內容,我們可以知道內容是相同還是不同。

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

注意 - 這裡我們考慮過的兩個文件,它們有相同的內容。

在本文中,我們探討如何在 Java 中逐行比較兩個不同文字檔案的內容。

以上是在Java中逐行比較兩個不同的文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除