Java 简明教程

Java - Files mismatch() Method

Files mismatch() Method

mismatch() 方法从 Java 12 起在 Files class 中可用。它提供了一种比较两个文件的简便方法。

Syntax

*Files.mismatch()*方法的语法为:

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

其中

  1. 如果不存在不匹配项,则返回 1L,否则返回第一个不匹配项的位置。

  2. 如果文件大小不匹配或字节内容不匹配,则会考虑不匹配项情况。

在以下情况下,文件被认为是相同的。

  1. 如果两个位置指向相同的文件。

  2. 如果路径相同且文件不存在,则文件会被认为是相同的。

  3. 如果文件具有相同大小并且第一个文件的每个字节都与第二个文件的相应字节匹配。

Parameters

path− 第一个文件的路径

path2− 第二个文件的路径

Return Value

第一个不匹配项的位置,如果没有不匹配项,则为 -1L。

Exceptions

IOException− 如果发生 I/O 错误。

SecurityException− 在默认提供程序的情况下,如果安装了安全管理器,将调用 checkRead() 方法来检查对两个文件的读取访问。

Files mismatch() Method Examples

Example: No Mismatch in Files

在此示例中,我们在临时目录中创建了两个 txt 文件,然后将相同内容写入到这两个文件中。使用 Files.mismatch() 方法将比较这两个文件是否相同。基于返回的结果,我们将打印消息。由于两个文件的内容相同,因此将打印一条消息“文件匹配”。

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();
   }
}

让我们编译并运行上述程序,这将生成以下结果 −

Files matched

Example: Mismatch Identification in Files

在此示例中,我们在临时目录中创建了两个 txt 文件,然后将不同的内容写入到这两个文件中。使用 Files.mismatch() 方法将比较这两个文件是否相同。基于返回的结果,我们将打印消息。由于两个文件的内容不同,因此不匹配方法将返回第一个不匹配项的位置,该位置将打印为输出。

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();
   }
}

让我们编译并运行上述程序,这将生成以下结果 −

Mismatch occurred in file1 and file3 at : 14