jdk12 jdk1.8
JDK 12向Files类引入了一种新方法。 方法Files.mismatch(Path,Path)
已通过JDK-8202302引入JDK 12,并在JDK 12 Early Access Build 20 (支持新{@systemProperty} Javadoc标记的相同早期访问版本)中可用 。
JDK-8202302 [“用于比较文件的(fs)New Files.mismatch方法”]添加了Files.mismatch(Path,Path)
方法“以比较两个文件的内容以确定它们之间是否存在不匹配”,并且可以用于确定“两个文件是否相等”。 曾经有一次添加File.isSameContent()方法的讨论 ,但是由于它与“ Arrays.mismatch和Buffer.mismatch方法”的一致性,因此决定使用Files.mismatch(Path,Parh)
。
下一个代码清单包含一个简单的Java类,该类演示了新的Files.mismatch(Path,Path)
并将其与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");
}
}
当针对各种文件组合执行上述代码时,它将提供在下表中捕获的结果。
文件关系 | Files.isSameFile(Path,Path) | Files.mismatch(Path,Path) |
---|---|---|
同一文件 | true | true |
复制的文件 | false | true |
不同的文件 | false | false |
软链接 | true | true |
硬连结 | true | true |
添加Files.mismatch(Path,Path)
是完成JDK-6852033 [“使常见的I / O任务更容易执行的输入/输出方法”]的又一个步骤,它使确定不属于该文件的两个文件的时间更加容易。相同文件仍然“相等”或具有相同内容。
翻译自: https://www.javacodegeeks.com/2018/11/jdk-12s-files-mismatch-method.html
jdk12 jdk1.8