Java Tutorial

Java Control Statements

Object Oriented Programming

Java Built-in Classes

Java File Handling

Java Error & Exceptions

Java Multithreading

Java Synchronization

Java Networking

Java Collections

Java List Interface

Java Queue Interface

Java Map Interface

Java Set Interface

Java Data Structures

Java Collections Algorithms

Java Miscellaneous

Advanced Java

Java APIs & Frameworks

Java Useful Resources

Java - Files mismatch() Method



Files mismatch() Method

The mismatch() method is available in Files class from Java 12 onwards. It provides an easy way to compare two files.

Syntax

The syntax of the Files.mismatch() method is -

public static long mismatch(Path path, Path path2) throws IOException

Where

  • If there is no mismatch then 1L is returned else position of first mismatch is returned.

  • Mismatch is accounted in case if file sizes are not matching or byte contents are not matching.

A file is considered identical in following cases.

  • If both locations are pointing to same file.

  • In case path is same and file is not present, files are considered same.

  • If files are of same size and each byte is first files matches with corresponding bytes of second file.

Parameters

path − the path to the first file

path2 − the path to the second file

Return Value

The position of the first mismatch or -1L if no mismatch.

Exceptions

IOException − If an I/O error occurs.

SecurityException − In the case of the default provider, and a security manager is installed, the checkRead() method is invoked to check read access to both files.

Files mismatch() Method Examples

Example: No Mismatch in Files

In this example, we've created two txt files in temporary directory and then written same content to both the files. Using Files.mismatch() method, both files are compared to be identical or not. Based on result returned, we're printing the message. As both file contents are same, a message will be printed as "Files matched".

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class APITester {
   public static void main(String[] args) throws IOException {
      // create two files in temp directory   
      Path path1 = Files.createTempFile("file1", ".txt");
      Path path2 = Files.createTempFile("file2", ".txt");

      // write same content to both the files
      Files.writeString(path1, "tutorialspoint");
      Files.writeString(path2, "tutorialspoint");

      // check files for Mismatch, 
      // being same content, it should return -1.
      long mismatch = Files.mismatch(path1, path2);

      // print the message based on mismatch result
      if(mismatch > 1L) {
         System.out.println("Mismatch occurred in file1 and file2 at : " + mismatch);
      }else {
         System.out.println("Files matched");
      }
	  
      // delete the files	  
      path1.toFile().deleteOnExit();
      path2.toFile().deleteOnExit();
   }
}

Output

Let us compile and run the above program, this will produce the following result −

Files matched

Example: Mismatch Identification in Files

In this example, we've created two txt files in temporary directory and then written different content to the files. Using Files.mismatch() method, both files are compared to be identical or not. Based on result returned, we're printing the message. As both file contents are different, mismatch method returns the position of first mismatch which will be printed as the output.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class APITester {
   public static void main(String[] args) throws IOException {
      // create two files in temp directory   
      Path path1 = Files.createTempFile("file1", ".txt");
      Path path2 = Files.createTempFile("file2", ".txt");

      // write same content to both the files
      Files.writeString(path1, "tutorialspoint");
      Files.writeString(path2, "tutorialspoint Java 12");

      // check files for Mismatch, 
      // being different content, it should return index of first mismatch.
      long mismatch = Files.mismatch(path1, path2);

      // print the message based on mismatch result
      if(mismatch > 1L) {
         System.out.println("Mismatch occurred in file1 and file2 at : " + mismatch);
      }else {
         System.out.println("Files matched");
      }
	  
      // delete the files	  
      path1.toFile().deleteOnExit();
      path2.toFile().deleteOnExit();
   }
}

Output

Let us compile and run the above program, this will produce the following result −

Mismatch occurred in file1 and file3 at : 14
Advertisements