2012-04-20 125 views
-1

我想统计没有发生字符串的文件,并且我有一个目录中的文档列表,但它们是多余的。如何从该特定目录中删除重复文件? 任何帮助表示赞赏!如何删除特定目录中的重复文件

public static boolean CompareFiles(File x, File y) throws FileNotFoundException 
{ //boolean result=true; 

    try  { 
     Scanner xs = new Scanner(x); 
     Scanner ys = new Scanner(y); 
     boolean result = true; 
     while (result) 
     { 
      if (xs.nextByte() != ys.nextByte()) result = false; 


     } 

return result; 
    } 
catch (FileNotFoundException e) 
{ 
    System.out.println(e.getMessage()); 
    return false; 
} 
} 

public static void main(String[] args) throws FileNotFoundException, IOException//  
    { 

    File dir = new File("C:/Users/Aravind/Documents/ranked"); 
    File[] fileList = dir.listFiles(); 
    for (int x = 0; x <fileList.length; x++) 
    { 
    for (int y = x+1; y < fileList.length; y++) 
    { 
    if (CompareFiles(fileList[x],fileList[y])) 
    { 
     System.out.println("in calling fn"); 
     fileList[x].delete(); 
    } 
     //System.out.println(fileList[x]); 
    } 
} 
+3

您可以在单个目录中创建冗余文件吗? – 2012-04-20 12:23:50

+0

你的意思是像'〜somedoc.txt'这样的文件,它似乎是'somedoc.txt'等的重复文件吗?如果是这样,只要检查文件名是否以'〜'开头。否则,请更具体一些,也许提供一个例子。 – Thomas 2012-04-20 12:33:36

+0

我正在索引中搜索一个单词,并基于该目录在目录中创建文件,因此存在多余的文件。 Ya Imean文件的内容是多余的,而不是文件的名称。 – 2012-04-20 12:35:15

回答

2

使用文件名作为关键字并将文件的校验和作为值创建一个映射(在此之后使用此example获取文件的校验和)。

在向该映射添加新条目之前,请检查计算出的校验和是否已经存在,如果两个文件具有相同的校验和,则它们的内容相同。

删除“冗余”文件。

+0

如果我有两个文件,一个是内容“这是一个文件”,另一个是内容“这是一个文件”,它们的校验和会非常不同。即使文件内的数据是相同的。 – 2012-04-20 12:52:58

+0

当然。在第五评论中,Aravind Chinta说“同样的内容”,所以我假设“完全一样的内容”,因为他没有提及任何关于标题或尾部空格的内容。 – jalopaba 2012-04-20 12:58:53

0
for (File f : dir.listFiles()) if (isDuplicate(f)) f.delete(); 

...也许给我们更多的细节你需要什么。

+0

例如,我有三个文件ile1.txt,file2.txt和file3.txt。现在假设file1.txt和file2.txt具有相同的内容,而file3.txt具有不同的内容。我想删除file1.txt或file2.txt中的一个。怎么样? in java – 2012-04-20 12:42:59

+0

你可以将所有文件的完整内容加载到RAM中吗?你知道怎么做吗? – 2012-04-20 12:45:46

+0

编号与RAMDirectory有什么关系? – 2012-04-20 12:47:38

相关问题