2014-11-03 44 views
0

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

} 

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

+0

在互联网上找到一些在Java代码中实现的散列函数是很容易的。什么阻止你这样做? – Dici 2014-11-03 18:53:28

+0

所有我已经找到并尝试使用 - 不起作用 – 2014-11-03 18:55:38

+0

目前还不清楚你想要达到什么目的。如果两个文件不同,那么是什么?如果两个文件是相同的,那么什么?如果两个文件的大小相同但hashCodes不同?如果这些文件的大小不一样,但是具有相同的hashCode? – RealSkeptic 2014-11-03 19:09:40

回答

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。