【问题标题】:Compare two files by hashCode通过 hashCode 比较两个文件
【发布时间】:2014-12-30 12:06:21
【问题描述】:

我需要一个类,它会在数组中找到重复项。我有一个排序列表,其中文件将在大小上进行比较,然后我想在(hashCode?)一些标准上比较它们。

public class FileComparison {

public void compare(ArrayList<File> arrayOfFiles) throws Exception {


    for(int i = 0; i < arrayOfFiles.size() - 1; i++) {
        for (int y = i + 1; y < arrayOfFiles.size() - 1; y++) {
            if(arrayOfFiles.get(i).length() == arrayOfFiles.get(y).length()) {
                //byte[] b1; 
                //byte[] b2;
                //don't know what to do     
            }
            if(arrayOfFiles.get(i).length() != arrayOfFiles.get(y).length()) {
                break;
            }
        } 
    }

}

如果两个文件的大小相同 - 它需要通过另一种方式比较它们。如果它们也以这种方式相同 - 文件是重复的。 如果大小不同 - 它们不是重复的。

【问题讨论】:

  • 在网上很容易找到一些用几行Java代码实现的哈希函数。是什么阻止你这样做?
  • 我已经找到并尝试使用的所有东西都不起作用
  • 不清楚你想要实现什么。如果两个文件不同,那怎么办?如果两个文件相同,那又是什么呢?如果两个文件大小相同但哈希码不同?如果文件大小不同但具有相同的hashCode?​​span>
  • @Dici 你不需要上网。内置的java.security.MessageDigest 会为你做这件事。
  • @ErwinBolwidt 我的意思是互联网上到处都是使用java.security 包来做这些事情的代码示例

标签: java file compare bytearray hashcode


【解决方案1】:

试试这个代码来计算 MD5 校验和并通过它进行比较:

import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.DigestInputStream;
import java.security.MessageDigest;

public class MD5 {

    public static String getMD5Sum(String filePath) throws Exception{

        MessageDigest md = MessageDigest.getInstance("MD5");

        try (InputStream is = Files.newInputStream(Paths.get(filePath))) {
          DigestInputStream dis = new DigestInputStream(is, md);
          int read = 0;
          do{
              read = dis.read();
          }while(read > -1);
        }
        byte[] digest = md.digest();
        digest.toString();
         String result = "";

           for (int i=0; i < digest.length; i++) {
               result += Integer.toString( ( digest[i] & 0xff ) + 0x100, 16).substring( 1     );
           }
           return result;
    }
}

getMD5Sum 方法将返回文件的 MD5 cehchsum。

【讨论】:

    猜你喜欢
    • 2016-06-22
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多