Статьи

Метод JDK 12 Files.mismatch

JDK 12 представляет новый метод для класса Files . Метод Files.mismatch(Path,Path) был представлен в JDK 12 через JDK-8202302 и доступен в JDK 12 Early Access Build 20 (та же самая ранняя сборка доступа, которая поддерживает новый тег Javadoc {@systemProperty} ).

JDK-8202302 [«(fs) Новый метод Files.mismatch для сравнения файлов»] добавляет метод Files.mismatch(Path,Path) «для сравнения содержимого двух файлов, чтобы определить, есть ли между ними несоответствие» и может быть используется для определения «равны ли два файла» Одно время говорили о добавлении метода Files.isSameContent () , но было решено использовать Files.mismatch(Path,Parh) из-за его согласованности «с методами Arrays.mismatch и Buffer.mismatch ».

Следующий листинг кода содержит простой Java-класс, который демонстрирует новый Files.mismatch(Path,Path) и сравнивает его с Files.isSameFile (Path, Path) .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package dustin.examples.jdk12.files;
 
import java.nio.file.Files;
import java.nio.file.Path;
 
import static java.lang.System.out;
 
/**
 * Demonstrate {@code Files.mismatch(Path,Path)} introduced with JDK 12
 * and useful for determining if two files have the same content even
 * if they're not the same files.
 */
public class FilesDemo
{
   public static void main(final String[] arguments) throws Exception
   {
      if (arguments.length < 2)
      {
         out.println("USAGE: FilesDemo <file1Name> <file2Name>");
         return;
      }
 
      final String file1Name = arguments[0];
      final Path file1Path = Path.of(file1Name);
      final String file2Name = arguments[1];
      final Path file2Path = Path.of(file2Name);
 
      out.println("\nFiles '" + file1Name + "' and '" + file2Name + "' are "
         + (Files.isSameFile(file1Path, file2Path) ? "the" : "NOT the")
         + " same.\n\n");
      out.println("\nFiles '" + file1Name + "' and '" + file2Name + "' are "
         + (Files.mismatch(file1Path, file2Path) == -1 ? "the" : "NOT the")
         + " same content.\n\n");
   }
}

Когда приведенный выше код выполняется для различных комбинаций файлов, он предоставляет результаты, полученные в следующей таблице.

Связь с файлами Files.isSameFile(Path,Path) Files.mismatch(Path,Path)
Тот же файл true true
Скопированный файл false true
Разные файлы false false
Soft-сшитый true true
Hard-сшитый true true

Добавление Files.mismatch(Path,Path) является еще одним шагом в реализации JDK-6852033 [«Методы входов / выходов для упрощения выполнения общих задач ввода-вывода»] и упрощает определение двух файлов, которые не являются один и тот же файл все еще «одинаков» или имеет одинаковое содержимое.

Опубликовано на Java Code Geeks с разрешения Дастина Маркса, партнера нашей программы JCG . См. Оригинальную статью здесь: Метод Files.mismatch JDK 12

Мнения, высказанные участниками Java Code Geeks, являются их собственными.