자바 코드 구현 CD 파일 통계 도구

개술
在这里插入图片描述
작업 컴퓨터 를 사용 한 지 3 년 이 넘 었 고 100 G 의 CD 도 견 딜 수 없 을 것 같 습 니 다.열 때마다 CD 가 빨 개 지 는 것 을 볼 때마다 청소 도구 로 정리 해 야 합 니 다.
최근 에 청소 도 구 를 치 워 도 효과 가 없 는 지 temp 아래 파일 을 삭제 하 는 것 은 큰 도움 이 되 지 않 습 니 다.
항상 처리 해 야 할 충동 이 있 습 니 다.이미 업무 에 영향 을 주 었 습 니 다.일요일 에 도 구 를 써 서 CD 의 파일 을 분석 해 보 세 요.최근 에 추 가 된 것 인 데 수 동 으로 삭제 할 수 있 는 지 확인 하 세 요.
버 전 소개
  • Maven-3.3.9
  • JDK 1.8 디 렉 터 리 구조
    
    com
      └─sedaier
          └─calcdir
              ├─service
              │  │  IDirSizeCalc.java
              │  │
              │  └─impl
              │         DirSizeCalcByForkJoinPoolImpl.java
              │
              ├─test
              │      Test.java
              │
              └─tool
                     OutputFileUtils.java //       
    소스 코드
    DirSizeCalcByForkJoinPoolImpl.java
    
    package com.sedaier.calcdir.service.impl;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.ForkJoinPool;
    import java.util.concurrent.ForkJoinTask;
    import java.util.concurrent.RecursiveTask;
    
    import com.sedaier.calcdir.service.IDirSizeCalc;
    import com.sedaier.calcdir.tool.OutputFileUtils;
    
    public class DirSizeCalcByForkJoinPoolImpl implements IDirSizeCalc {
    	
    	@Override
    	public long getSize(final File file, final File log) {
    		ForkJoinPool forkJoinPool = new ForkJoinPool();
    		return forkJoinPool.invoke(new FileSizeFinder(file, log));
    	}
    
    	@SuppressWarnings("serial")
    	private static class FileSizeFinder extends RecursiveTask<Long> {
    		final File file;
    		final File log;
    
    		FileSizeFinder(final File theFile, final File theLog) {
    			file = theFile;
    			log = theLog;
    		}
    
    		@Override
    		public Long compute() {
    			long size = 0;
    			if (file.isFile()) {
    				size = file.length();
    				OutputFileUtils.write(log, file);
    			} else {
    				final File[] children = file.listFiles();
    				if (children != null) {
    					List<ForkJoinTask<Long>> tasks = new ArrayList<ForkJoinTask<Long>>();
    					for (final File child : children) {
    						if (child.isFile()) {
    							size += child.length();
    							OutputFileUtils.write(log, child);
    						} else {
    							tasks.add(new FileSizeFinder(child, log));
    						}
    					}
    					for (final ForkJoinTask<Long> task : invokeAll(tasks)) {
    						size += task.join();
    					}
    				}
    			}
    			return size;
    		}
    	}
    }
    IDirSizeCalc.java
    
    package com.sedaier.calcdir.service;
    
    import java.io.File;
    
    public interface IDirSizeCalc {
    	long getSize(final File file, final File log);
    }
    Test.java
    
    package com.sedaier.calcdir.test;
    
    import java.io.File;
    
    import com.sedaier.calcdir.service.IDirSizeCalc;
    import com.sedaier.calcdir.service.impl.DirSizeCalcByForkJoinPoolImpl;
    import com.sedaier.calcdir.tool.OutputFileUtils;
    
    public class Test {
    	public static void main(final String[] args) {
    		String dirPath = "C:\\Windows";
    		String log = "C:\\Users\\Administrator\\Desktop\\log.log";
    		File file = new File(dirPath);
    		File logFile = new File(log);
    
    		calcDirSize(file, logFile, new DirSizeCalcByForkJoinPoolImpl());
    		OutputFileUtils.distory();
    	}
    
    	private static void calcDirSize(File file, File log, IDirSizeCalc dirSizeCalc) {
    		dirSizeCalc.getSize(file, log);
    	}
    }
    OutputFileUtils.java
    
    package com.sedaier.calcdir.tool;
    
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Calendar;
    
    public class OutputFileUtils {
    
    	public static int time = 0;
    	//buffer     
    	public static int overtime = 100;
    	//       
    	public static boolean flag = false;
    	public static FileWriter out = null;
    	public static BufferedWriter bw = null;
    	//  
    	public static long day;
    	//       -1         ,-2         
    	public static int amount = -1;
    	
    	static {
    		//     
    		Calendar instance = Calendar.getInstance();
    		instance.add(Calendar.DAY_OF_MONTH, amount);
    		day = instance.getTimeInMillis();
    	}
    	
    	public static void write(final File log, File file) {
    		
    		try {
    			if (!flag && !log.exists()) {
    				log.createNewFile();
    				flag = true;
    			}
    			if(out == null || bw == null) {
    				out = new FileWriter (log);
    				bw = new BufferedWriter(out);
    			}
    			long lastModified = file.lastModified();
    			if(lastModified > day) {
    				bw.write(String.format("%s===  =%d===  =%tF",file.getAbsolutePath(),file.length()/1000000,lastModified));
    				bw.newLine();
    			}
    			time++;
    			if(time > overtime) {
    				bw.flush();
    				time = 0 ;
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public static void distory() {
    		try {
    			bw.close();
    			out.close();
    			System.out.println("    !");
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
    원본 다운로드 주소
    https://gitee.com/lanseyouyu/sediaer-calcdir.git
    자바 코드 구현 CD 파일 통계 도구 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 CD 파일 통계 도구 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기