Rumah > Java > javaTutorial > Bandingkan dua fail berbeza baris demi baris dalam Java

Bandingkan dua fail berbeza baris demi baris dalam Java

WBOY
Lepaskan: 2023-08-23 15:37:08
ke hadapan
1743 orang telah melayarinya

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.

Tunjukkan kepada anda beberapa contoh

Contoh 1

Imej di bawah menggambarkan dua fail teks berbeza dengan kandungan yang sama, jadi output akan menjadi dua fail dengan kandungan yang sama.

Bandingkan dua fail berbeza baris demi baris dalam Java

Contoh 2

Yang berikut mewakili dua fail, dengan andaian file1.txt dan file2.txt, serta kandungannya.

Fail 1.txt

This is amazing.
Java Language.
Salin selepas log masuk

file2.txt

This is amazing.
Python Language.
Salin selepas log masuk

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"

Algoritma

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

Pelbagai kaedah

Kami menyediakan penyelesaian dengan cara yang berbeza.

  • Dengan menggunakan kelas BufferedReader

  • Dengan menggunakan fail dipetakan memori

Lihat program dan outputnya satu demi satu.

Kaedah 1: Gunakan kelas BufferedReader

Contoh

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();
   }
}
Salin selepas log masuk

Output

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
Salin selepas log masuk

Nota - Senario input di sini adalah serupa dengan Contoh 2 yang dijelaskan di atas.

Kaedah 2: Menggunakan fail dipetakan memori

Contoh

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);
      }
   }
}
Salin selepas log masuk

Output

Both files have same content
Salin selepas log masuk

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!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan