通过hashCode比较两个文件

时间:2014-11-03 18:48:39

标签: java file compare bytearray hashcode

我需要一个类,它会在数组中找到重复项。我有一个排序列表,其中文件将在大小上进行比较,然后我想比较它们(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;
            }
        } 
    }

}

如果两个文件的大小相同 - 则需要通过其他方式对它们进行比较。如果它们也是这样的 - 文件是重复的。 如果大小不同 - 它们不是重复的。

1 个答案:

答案 0 :(得分:0)

尝试使用此代码计算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。