概述

工作电脑用了3年多了,100g的c盘也快吃不消了,每次打开看到c盘红了,总要用清理工具清理一下子.

不知道怎么最近清理工具清理了也没有什么效果,把temp下面的文件删除,没什么大作用.

总是有一种冲动要去处理掉,已经影响工作了.乘着星期天写个工具,分析一下c盘的文件,看看那些是最近才增加的,能不能手动删除掉.

版本介绍

  • maven-3.3.9
  • jdk1.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();
		}
	}
}

源码下载地址

到此这篇关于java代码实现c盘文件统计工具的文章就介绍到这了,更多相关java c盘文件统计工具内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!