'java.nio.file.Files' class provide 'mismatch' method, it takes two files as input and finds and returns the position of the first mismatched byte in the content of two files, or -1L if there is no mismatch.
Signature
public static long mismatch(Path path, Path path2) throws IOException
Parameters:
path - the path to the first file
path2 - the path to the second file
Returns:
the position of the first mismatch or -1L if no mismatch
When can two files are considered to be same?
Two files are considered to match if they satisfy one of the following conditions:
a. The two paths locate the same file, even if two equal paths locate a file does not exist, or
b. The two files are the same size, and every byte in the first file is identical to the corresponding byte in the second file.
Otherwise there is a mismatch between the two files and the value returned by this method is:
a. The position of the first mismatched byte, or
b. The size of the smaller file (in bytes) when the files are different sizes and every byte of the smaller file is identical to the corresponding byte of the larger file.
Find the below working application.
FileMismatchExample.java
package com.sample.app.files;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class FileMismatchExample {
private static void writeToFile(Path path, String content) throws IOException {
Files.write(path, content.getBytes());
}
public static void main(String args[]) throws IOException {
File file1 = File.createTempFile("file1", ".txt");
File file2 = File.createTempFile("file2", ".txt");
File file3 = File.createTempFile("file3", ".txt");
String str1 = "Hello World";
String str2 = "Helloworld";
Path path1 = file1.toPath();
Path path2 = file2.toPath();
Path path3 = file3.toPath();
writeToFile(path1, str1);
writeToFile(path2, str1);
writeToFile(path3, str2);
long offset = Files.mismatch(path1, path2);
if (offset == -1l) {
System.out.println(path1 + " and " + path2 + " has same content");
} else {
System.out.println(path1 + " and " + path2 + " do not have same content. Mismatch found at byte " + offset);
}
offset = Files.mismatch(path1, path3);
if (offset == -1l) {
System.out.println(path1 + " and " + path3 + " has same content");
} else {
System.out.println(path1 + " and " + path3 + " do not have same content. Mismatch found at byte " + offset);
}
}
}
Sample output
/var/folders/tp/qybw2qy54t39ffn2l0grsdrc0000gp/T/file13438498583646993710.txt and /var/folders/tp/qybw2qy54t39ffn2l0grsdrc0000gp/T/file214420760322000149874.txt has same content
/var/folders/tp/qybw2qy54t39ffn2l0grsdrc0000gp/T/file13438498583646993710.txt and /var/folders/tp/qybw2qy54t39ffn2l0grsdrc0000gp/T/file313488649827910837929.txt do not have same content. Mismatch found at byte 5
Reference
No comments:
Post a Comment