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, являются их собственными. |