【java】递归统计本地磁盘所有文件,提取重复文件,JDK8 map迭代

package com.sxd.createDao;

import java.io.File;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;



public class Test {
    
    private long a = 0;
    Map<String, File> map = new HashMap<String, File>();
    Map<String, String> repeatMap = new TreeMap<String ,String>();
    @org.junit.Test
    public void test() {
        System.out.println(LocalDateTime.now());
        //本机磁盘上所有文件
        File [] files = File.listRoots();
        for (File file : files) {
            num(file);
        }
//        num(new File("D:/BaiduYunDownload"));  //单个文件夹下
        
        System.out.println("计算机文件总数:"+a);
        System.out.println(LocalDateTime.now());
        if(repeatMap.size() > 0){
            repeatMap.forEach((k,v)->System.out.println("文件路径:"+k+"  文件名:"+v));
        }
        
        
    }
    
    
    
    //计算文件夹下所有文件总数
    public  void num(File file){
        if(file.isDirectory()){
            File [] files = file.listFiles();
            if(files != null){
                for (File string : files) {
                    num(string);
                }
            }
        }else{
            a++;
            if(map.containsKey(file.getName())){
                File thisFile = map.get(file.getName());
                if(file.getTotalSpace() == thisFile.getTotalSpace()){
                    repeatMap.put(file.getPath() , file.getName());
                    repeatMap.put(thisFile.getPath(),thisFile.getName());
                }
            }else{
                map.put(file.getName(),file);
            }
            
            
        }
    }
}
 
原文地址:https://www.cnblogs.com/sxdcgaq8080/p/7200928.html