Dans cet article, nous comparerons deux fichiers texte différents enregistrés dans le système. Nous examinons chaque fichier texte ligne par ligne et par comparaison nous pouvons identifier les similitudes et les différences.
Voyons comment l'implémenter à l'aide du langage de programmation Java.
L'image ci-dessous représente deux fichiers texte différents avec le même contenu, le résultat sera donc deux fichiers avec le même contenu.
Ce qui suit représente deux fichiers, en supposant file1.txt et file2.txt, et leur contenu.
Fichier 1.txt
This is amazing. Java Language.
file2.txt
This is amazing. Python Language.
Ici, on peut remarquer que les deux fichiers ont un contenu différent sur la ligne 2. Puisque le fichier 1, la ligne 2 contient le "langage Java" et le fichier 2, la ligne 2 contient le "langage Python"
Étape 1 - Créez reader1 et reader2 en tant que deux objets BufferedReader et utilisez-les pour lire deux fichiers texte d'entrée ligne par ligne.
Étape 2 - Créez deux variables. Tout d'abord, créez une variable booléenne appelée "areEqual" et initialisez-la à true. Deuxièmement, créez une variable int appelée "lineNum" et initialisez-la à 1. areEqual est une variable d'indicateur initialement définie sur true et qui devient false lorsque le contenu des fichiers d'entrée diffère. Le nombre de lignes sera enregistré dans lineNum.
Étape 3 - Lisez le contenu du fichier 1 dans la ligne 1 et le contenu du fichier 2 dans la ligne 2.
Étape 4 - Lisez les lignes des fichiers file1 et file2 respectivement dans line1 et line2 jusqu'à ce que les deux fichiers aient été lus. Si line1 ou line2 est vide, définissez "areEqual" sur false.
Étape 5 - Si areEqual est vrai, déclarez que le contenu des deux fichiers est le même. Si la valeur de areEqual est fausse, le contenu des fichiers déclarés est différent.
Étape 6 - Fermez la ressource.
Nous proposons des solutions de différentes manières.
En utilisant la classe BufferedReader
En utilisant des fichiers mappés en mémoire
Visualisez les programmes et leur sortie un par un.
Dans cette méthode, vous créerez un objet de la classe BufferedReader et utiliserez la méthode readLine() intégrée pour lire le contenu de deux fichiers et les comparer.
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
Remarque - Le scénario de saisie ici est similaire à l'exemple 2 expliqué ci-dessus.
Dans cette méthode, nous utiliserons le concept de fichier mappé en mémoire, qui est un objet du noyau qui mappe les octets d'un fichier disque à l'adresse mémoire du système, en manipulant le contenu du fichier mappé en mémoire, nous pouvons savoir si. le contenu est identique ou différent.
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
REMARQUE - nous considérons ici deux fichiers, ils ont le même contenu.
Dans cet article, nous avons exploré comment comparer le contenu de deux fichiers texte différents ligne par ligne en Java.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!