【问题标题】:How can I compare two files with same content but with different Host OS?如何比较具有相同内容但具有不同主机操作系统的两个文件?
【发布时间】:2019-08-06 15:03:23
【问题描述】:

我正在比较两个具有相同内容但具有不同主机操作系统(UNIX / FLAT)的 jar 文件,因此它们得到不同的 CRC。如何在不提取它们的情况下比较它们?

我不想提取 jar 文件,因为实际上应用程序在两个 ear 文件之间进行比较:每个 ear 是具有 300 多个 jar 文件的项目的一个版本(旧版本/新版本)。 我曾经使用 FileUtils.contentEquals 比较两个 jar,它适用于正常情况(具有相同主机操作系统的示例 jar 文件)。

boolean isTwoEqual = FileUtils.contentEquals(File1, File2);

当两个文件的内容相同时,我希望isTwoEqual 的输出为true,但实际输出为false,因为它们具有不同的主机操作系统,因此它们得到不同的CRC 码。

【问题讨论】:

  • 据我所知这是不可能的。 CRC 不会挑挑拣拣。它基于文件中的所有位。任何更改都会为您提供不同的代码。但也许有人有一个解决方案,可以以实际可行的不同方式解决问题。
  • @Jeff Grigg 的回答很好。几乎可以肯定,不同之处在于行尾字符。您需要以一种或另一种方式打开罐子并比较它们而忽略它们。罐子是 zip 文件。正如 Jeff 所说,您可以解压缩内容并按字符比较流,而无需编写文件。它仍然会占用大量资源(cpu 和 ram),但实际上别无选择。您还需要一种推断文件是文本数据还是非文本数据的方法。试图在数据文件中查找行并去除行尾也会得到错误的答案。

标签: java crc file-comparison


【解决方案1】:

我已经使用java.util.zip.ZipInputStream 类和NextEntryint read(byte b[]) 方法调用实现了InputStream,以读取ZIP 文件的内容而不将内容提取到单独的临时文件中。

然后使用BufferedReaderreadLine方法读取行,丢弃行尾,比较两个来源的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-02
    • 2017-06-18
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    相关资源
    最近更新 更多