Java >> Java Tutorial >  >> JDK

Die Files.mismatch-Methode von JDK 12

JDK 12 führt eine neue Methode in die Files-Klasse ein. Die Methode Files.mismatch(Path,Path) , wurde über JDK-8202302 in JDK 12 eingeführt und ist in JDK 12 Early Access Build 20 verfügbar (dieselbe Early-Access-Build, die das neue Javadoc-Tag {@systemProperty} unterstützt).

JDK-8202302 [„(fs) Neue Files.mismatch-Methode zum Vergleichen von Dateien“] fügt den Files.mismatch(Path,Path) hinzu Methode „um den Inhalt zweier Dateien zu vergleichen, um festzustellen, ob es eine Diskrepanz zwischen ihnen gibt“ und kann verwendet werden, um zu bestimmen, „ob zwei Dateien gleich sind“. Es wurde einmal davon gesprochen, eine Files.isSameContent()-Methode hinzuzufügen, aber es wurde entschieden, Files.mismatch(Path,Parh) zu verwenden aufgrund seiner Konsistenz „mit den Methoden Arrays.mismatch und Buffer.mismatch.“

Das nächste Code-Listing enthält eine einfache Java-Klasse, die den neuen Files.mismatch(Path,Path) demonstriert und kontrastiert es mit Files.isSameFile(Path,Path).

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

Wenn der obige Code für verschiedene Kombinationen von Dateien ausgeführt wird, liefert er Ergebnisse, die in der nächsten Tabelle erfasst sind.

Dateibeziehung Files.isSameFile(Path,Path) Files.mismatch(Path,Path)
Gleiche Datei true true
Kopierte Datei false true
Verschiedene Dateien false false
Soft-linked true true
Fest verknüpft true true

Die Hinzufügung von Files.mismatch(Path,Path) ist ein weiterer Schritt zur Erfüllung von JDK-6852033 [„Inputs/Outputs methods to make common I/O task easy to do“] und erleichtert die Bestimmung, ob zwei Dateien, die nicht dieselbe Datei sind, immer noch „gleich“ sind oder dasselbe haben Inhalt.

Java-Tag