确定两个文件是否存储相同的内容

2022-08-31 13:05:28

您将如何编写一个java函数来确定两个给定路径是否指向存储相同内容的文件?当然,首先,我会检查文件大小是否相同。这是存储相同内容的必要条件。但是,我想听听你的方法。如果两个文件存储在同一个硬盘驱动器上(就像我的大多数情况一样),这可能不是在两个流之间跳转太多次的最佳方法。boolean sameContent(Path file1,Path file2)


答案 1

Apache commons IO和api的确切方法在这里FileUtils.contentEquals

试试下面这些方法:

File file1 = new File("file1.txt");
File file2 = new File("file2.txt");
boolean isTwoEqual = FileUtils.contentEquals(file1, file2);

在实际进行比较之前,它会执行以下检查:

  • 两个文件的存在
  • 传递的两个文件都是文件类型,而不是目录。
  • 长度(以字节为单位)不应相同。
  • 两者是不同的文件,而不是一个相同的文件。
  • 然后比较内容。

答案 2

如果您不想使用任何外部库,则只需将文件读入字节数组并进行比较(在Java-7之前不起作用):

byte[] f1 = Files.readAllBytes(file1);
byte[] f2 = Files.readAllBytes(file2);

通过使用 Arrays.equals

如果文件很大,则不应将整个文件读入数组,而应使用并逐块读取文件,如此所述。BufferedInputStream