Dalam artikel ini, kami akan membandingkan dua fail teks berbeza yang disimpan dalam sistem. Kami memeriksa setiap fail teks baris demi baris dan dengan perbandingan kami boleh mengenal pasti persamaan dan perbezaan.
Mari lihat cara melaksanakannya menggunakan bahasa pengaturcaraan Java.
Imej di bawah menggambarkan dua fail teks berbeza dengan kandungan yang sama, jadi output akan menjadi dua fail dengan kandungan yang sama.
Yang berikut mewakili dua fail, dengan andaian file1.txt dan file2.txt, serta kandungannya.
Fail 1.txt
This is amazing. Java Language.
file2.txt
This is amazing. Python Language.
Di sini, kita dapat melihat bahawa kedua-dua fail mempunyai kandungan yang berbeza pada baris 2. Sejak fail 1, baris 2 mengandungi "bahasa Java" dan fail 2, baris 2 mengandungi "Bahasa Python"
Langkah 1 − Cipta pembaca1 dan pembaca2 sebagai dua objek BufferedReader dan gunakannya untuk membaca dua fail teks input baris demi baris.
Langkah 2 - Buat dua pembolehubah. Mula-mula, buat pembolehubah Boolean yang dipanggil "areEqual" dan mulakannya kepada benar. Kedua, buat pembolehubah int yang dipanggil "lineNum" dan mulakannya kepada 1. areEqual ialah pembolehubah bendera yang pada mulanya ditetapkan kepada benar dan berubah kepada palsu apabila kandungan fail input berbeza. Bilangan baris akan disimpan dalam lineNum.
Langkah 3 - Baca kandungan fail 1 ke baris 1 dan kandungan fail 2 ke baris 2.
Langkah 4 - Baca baris dalam fail fail1 dan fail2 masing-masing ke baris1 dan baris2 sehingga kedua-dua fail dibaca. Jika baris1 atau baris2 kosong, tetapkan "areEqual" kepada false.
Langkah 5 − Jika areEqual adalah benar, isytiharkan kandungan kedua-dua fail adalah sama. Jika nilai areEqual adalah palsu, kandungan fail yang diisytiharkan adalah berbeza.
Langkah 6 - Tutup sumber.
Kami menyediakan penyelesaian dengan cara yang berbeza.
Dengan menggunakan kelas BufferedReader
Dengan menggunakan fail dipetakan memori
Lihat program dan outputnya satu demi satu.
Dalam kaedah ini, anda akan mencipta objek kelas BufferedReader dan menggunakan kaedah readLine() terbina dalam untuk membaca kandungan dua fail dan membandingkannya.
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
Nota - Senario input di sini adalah serupa dengan Contoh 2 yang dijelaskan di atas.
Dalam kaedah ini, kita akan menggunakan konsep fail yang dipetakan memori, iaitu objek kernel yang memetakan bait fail cakera ke alamat memori sistem Dengan memanipulasi kandungan fail yang dipetakan memori, kita boleh mengetahui sama ada isinya sama atau berbeza .
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
NOTA - di sini kami sedang mempertimbangkan dua fail, ia mempunyai kandungan yang sama.
Dalam artikel ini, kami meneroka cara membandingkan kandungan dua fail teks berbeza baris demi baris di Jawa.
Atas ialah kandungan terperinci Bandingkan dua fail berbeza baris demi baris dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!