在本文中,我們將比較系統中儲存的兩個不同的文字檔案。我們會逐行檢查每個文字文件,透過比較我們可以找出異同。
讓我們來看看如何使用Java程式語言來實作它。
下圖描繪了兩個具有相同內容的不同文字文件,因此輸出將是兩個具有相同內容的文件。
下面表示兩個文件,假設是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 類別
透過使用記憶體映射檔案
#逐一查看程式及其輸出。
在這個方法中,您將建立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。
在這種方法中,我們將利用記憶體映射檔案的概念,這是一個將磁碟檔案的位元組映射到系統記憶體位址的內核對象,透過操作記憶體映射檔案的內容,我們可以知道內容是相同還是不同。
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中文網其他相關文章!