Vergleichen Sie den Inhalt zweier Dateien in Java
- Byte-für-Byte-Vergleich zweier Dateien in Java
- Zeilenweiser Vergleich zweier Dateien in Java
-
Vergleichen Sie zwei Dateien mit
Files.mismatch()
in Java - Vergleichen Sie zwei Dateien mit Apache Commons IO in Java
-
Vergleichen Sie zwei Dateien mit
Arrays.equals()
in Java
Es gibt einige Möglichkeiten, den Inhalt zweier Dateien zu vergleichen. Dieses Tutorial zeigt verschiedene Möglichkeiten, zwei Dateien in Java zu vergleichen.
Byte-für-Byte-Vergleich zweier Dateien in Java
Der BufferedInputStream
wird verwendet, um die Datei zu lesen und jedes Byte einer Datei mit der anderen Datei zu vergleichen. Wir verwenden die read()
-Methode von BufferedReader
, um jedes Byte zu lesen und zu vergleichen.
Wir haben zwei ähnliche Textdateien mit unterschiedlichen Namen erstellt, delftstack1
und delftstack2
, mit dem Inhalt:
Hello This is delftstack.com
The best online platform for learning different programming languages.
Versuchen wir ein Beispiel, um beide Dateien Byte für Byte zu vergleichen.
package delftstack;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
public class File_Compare {
private static boolean CompareFilesbyByte(Path File_One, Path File_Two) {
try {
long file_size = Files.size(File_One);
if (file_size != Files.size(File_Two)) {
return false;
}
if (file_size < 2048) {
return Arrays.equals(Files.readAllBytes(File_One), Files.readAllBytes(File_Two));
}
// Compare byte-by-byte
try (BufferedReader Content1 = Files.newBufferedReader(File_One);
BufferedReader Content2 = Files.newBufferedReader(File_Two)) {
int byt;
while ((byt = Content1.read()) != -1) {
if (byt != Content2.read()) {
return false;
}
}
}
return true;
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
File File_One = new File("delftstack1.txt"); // Path to file one
File File_Two = new File("delftstack2.txt"); // Path to file two
boolean Comparison = CompareFilesbyByte(File_One.toPath(), File_Two.toPath());
if (Comparison) {
System.out.println("The Input files are equal.");
} else {
System.out.println("The Input files are not equal");
}
}
}
Der Code vergleicht die Dateien byteweise. Die Ausgabe ist:
The Input files are equal.
Zeilenweiser Vergleich zweier Dateien in Java
Ebenso wird der BufferedInputStream
auch verwendet, um die Datei zu lesen und jede Zeile einer Datei mit jeder Zeile der anderen Datei zu vergleichen. Wir verwenden die readline()
-Methode von BufferedReader
, um jede Zeile zu lesen und zu vergleichen.
Sehen wir uns ein Beispiel an.
package delftstack;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
public class File_Compare {
private static boolean CompareFilesbyByte(Path File_One, Path File_Two) {
try {
long file_size = Files.size(File_One);
if (file_size != Files.size(File_Two)) {
return false;
}
if (file_size < 2048) {
return Arrays.equals(Files.readAllBytes(File_One), Files.readAllBytes(File_Two));
}
// Compare byte-by-byte
try (BufferedReader Content1 = Files.newBufferedReader(File_One);
BufferedReader Content2 = Files.newBufferedReader(File_Two)) {
String line;
while ((line = Content1.readLine()) != null) {
if (line != Content2.readLine()) {
return false;
}
}
}
return true;
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
File File_One = new File("delftstack1.txt"); // Path to file one
File File_Two = new File("delftstack2.txt"); // Path to file two
boolean Comparison = CompareFilesbyByte(File_One.toPath(), File_Two.toPath());
if (Comparison) {
System.out.println("The Input files are equal.");
} else {
System.out.println("The Input files are not equal");
}
}
}
Der obige Code vergleicht zwei Dateien Zeile für Zeile. Da der Inhalt in den Dateien gleich ist, lautet die Ausgabe:
The Input files are equal.
Vergleichen Sie zwei Dateien mit Files.mismatch()
in Java
Kürzlich hat Java 12 die Methode Files.mismatch
in der Klasse java.nio.file.Files
hinzugefügt, um zwei Dateien zu vergleichen.
Diese Methode nimmt Dateien als Eingaben und vergleicht den Inhalt bestimmter Dateien; Es gibt -1
zurück, wenn die beiden Dateien gleich sind, und wenn nicht, gibt es die Position des ersten nicht übereinstimmenden Bytes zurück.
Wir haben eine dritte Datei mit anderem Inhalt erstellt. Versuchen wir ein Beispiel, um die verschiedenen Dateien zu vergleichen.
package delftstack;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class File_Compare {
public static void main(String[] args) throws IOException {
File File_One = new File("delftstack1.txt");
File File_Two = new File("delftstack2.txt");
File File_Three = new File("delftstack3.txt");
long Compare1 = Files.mismatch(File_One.toPath(), File_Two.toPath());
System.out.println(Compare1);
long Compare2 = Files.mismatch(File_Two.toPath(), File_Three.toPath());
System.out.println(Compare2);
}
}
Der obige Code vergleicht zuerst zwei ähnliche Dateien, die -1
zurückgeben sollten, und vergleicht dann zwei verschiedene Dateien, die die Position des ersten nicht übereinstimmenden Bytes zurückgeben sollten. Siehe Ausgabe:
-1
34
Vergleichen Sie zwei Dateien mit Apache Commons IO in Java
Die Klasse FileUtils
von Apache Commons IO wird verwendet, um mit Dateien zu arbeiten. Die Methode contentEquals()
kann verwendet werden, um zwei Dateien zu vergleichen, die true
zurückgibt, wenn der Inhalt zweier Dateien gleich ist oder beide Dateien nicht existieren.
Versuchen wir es an einem Beispiel.
package delftstack;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class File_Compare {
public static void main(String[] args) throws IOException {
File File_One = new File("delftstack1.txt");
File File_Two = new File("delftstack2.txt");
boolean Comapre_Result = FileUtils.contentEquals(File_One, File_Two);
if (Comapre_Result) {
System.out.println("The input files are equal.");
} else {
System.out.println("The input files are not equal.");
}
}
}
Der Code vergleicht zwei Dateien und prüft, ob sie gleich sind oder nicht, indem er die Apache-Klasse FileUtils
verwendet. Siehe Ausgabe:
The input files are equal.
Vergleichen Sie zwei Dateien mit Arrays.equals()
in Java
Wir können die gesamten Dateien in Byte-Arrays einlesen und diese Arrays dann auf Gleichheit vergleichen. Mit Files.readAllBytes()
können wir die Datei in Byte-Arrays einlesen und mit Arrays.equals()
deren Gleichheit prüfen.
Diese Methode wird für große Dateien nicht empfohlen. Siehe Beispiel:
package delftstack;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
public class File_Compare {
private static boolean CompareFileArrays(Path File_One, Path File_Two) {
try {
if (Files.size(File_One) != Files.size(File_Two)) {
return false;
}
byte[] First_File = Files.readAllBytes(File_One);
byte[] Second_File = Files.readAllBytes(File_Two);
return Arrays.equals(First_File, Second_File);
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
File File_One = new File("delftstack1.txt");
File File_Two = new File("delftstack2.txt");
boolean Compare_Result = CompareFileArrays(File_One.toPath(), File_Two.toPath());
if (Compare_Result) {
System.out.println("The Input files are equal.");
} else {
System.out.println("The Input files are not equal.");
}
}
}
Der obige Code liest die Dateien in Byte-Arrays und vergleicht dann diese Arrays. Siehe Ausgabe:
The Input files are equal.
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook