【问题标题】:How to detect if two text files are identical in java如何在java中检测两个文本文件是否相同
【发布时间】:2009-10-14 19:21:54
【问题描述】:

我想检测 file1.xml 是否不同于 file1.xmlCheck 有没有办法在 java 中做到这一点?

我打算将 guid 作为文件中的唯一区别。

【问题讨论】:

  • 您是在谈论语义不同(相同的 XML 结构布局不同)还是只是比较文件的实际内容?
  • 好吧,他问的是文件是否相同,而 GUID 是唯一的区别,但还是提出一个很好的观点......

标签: java


【解决方案1】:

这里是用 Java 编写的开源 XML 差异工具列表的链接

http://www.manageability.org/blog/stuff/open-source-xml-diff-in-java

【讨论】:

    【解决方案2】:

    你不妨试试显而易见的并读入文件。你可以逐个字符、逐块读取它们(比如一次 1024 或 4096 个字符),或者逐行比较你得到的字符串。

    如果您知道您的 GUID 的确切位置并且它接近开头或其他类似的位置,您也可以将其构建到您的比较中。

    如果您想要逐行使用 Java 1.5 或更新版本,请查看java.util.Scanner;否则请查看 java.io.FileReader 以读取字符块。

    (注意:如果您没有 Java 1.5 或更新版本,您会被 FileReader 卡住)

    【讨论】:

      【解决方案3】:

      您可以在两个文件上运行 md5 并比较值。

      【讨论】:

      • 这没有任何好处,原因有二:一,他希望有一个不同的字段(他提到的 GUID);二,md5 在技术上可以碰撞,所以相等的校验和并不一定意味着校验和函数的输入相等。
      • 这就是为什么我推荐 md5,一种已知的快速算法。发生碰撞的概率,即使有轻微的相似性 - xml 标头 - 比我完全比较两个文本文件所花费的时间要小得多。
      • 值得注意的是,MD5 有点破。 IIRC 可以填充文档以提出您想要的哈希值。此外,如果必须对所有字符执行操作,并且 OP 可以选择读取和比较所有字符(在文件大小检查之后 - 如果它们的大小不同,则可能不值得进一步),那么一个简单的逐字节比较似乎比 f(each-byte-from-file1) == f(each-byte-from-file2) 操作密集度低
      • 如果您要比较许多文件以查找重复项,则散列方法很有用,但如果您只是想检查两个文件是否相同,则根本没有用。您需要读取整个文件以对其进行哈希处理,因此您不妨同时读取两个文件并逐字节比较它们。 (这是假设问题是关于检查完全匹配的,似乎这个问题没有给出“guid”简介。)
      • 谁赞成他的回复评论?正如 Laurence Gonsalves 正确指出的那样,他甚至不是一开始就在寻找纯粹相同的文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 2023-02-10
      • 2014-08-23
      • 2010-10-02
      • 2012-08-23
      • 1970-01-01
      相关资源
      最近更新 更多