eclipse删除没有引用的文件

该程序演示了如何在Eclipse环境下查找并删除没有被引用的文件,包括通过反射的类。程序遍历指定路径下的所有文件,排除特定目录,并在删除前提示用户备份以防误删。
package java_test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

/**
 * @author 杨通海
 * @version 创建时间:2016年10月27日 下午3:35:42 类说明 安全检测项目没有引用的文件,包括反射的类
 */
public class FileDelete {
	public static int num = 0;
	// 存储所有文件
	public static List<File> fileList = new ArrayList<File>();
	// 存储所有文件内的内容
	public static Map<String, String> dataList = new HashMap<String, String>();
	// 需要屏蔽移除的一些目录
	public static List<String> containsList = new ArrayList<String>();
	static {
		containsList.add(".svn");
		containsList.add(".jar");
		containsList.add("bin");
		containsList.add("gen");
		containsList.add("assets");
		containsList.add("values");
	}

	public static void main(String[] args) {
		String path = "D:\\eclipse workspace\\CashierDesk-mversion";
		startDelete(path);
	}

	/**
	 * 执行删除文件、删除前会确认是否确定删除
	 * 
	 * @param path
	 *            项目路径
	 */
	public static void startDelete(String path) {
		selectWhile(path);
		List<String> resultList = containWhil(path);
		for (String s : resultList) {
			System.err.println(s);
		}
		System.err.println("需要删的的总文件数:" + resultList.size());
		Scanner sc = new Scanner(System.in);
		System.err.println("删除前请先备份项目,防止误删,如已备份请确认需要删除文件是不需删除,如有不需要删除文件,请在static静态块添加对应目录,再重新运行,是否确认删除(n/y)回车?\n\n\n\n");
		String scResult = sc.nextLine();
		if ("y".equals(scResult) || "Y".equals(scResult)) {
			for (String s : resultList) {
				// 打开代码执行删除,删除前先备份好项目
				File file = new File(s);
				file.delete();
			}
		}
		System.err.println("删除完成");
	}

	/**
	 * 找到目录下的所有文件
	 * 
	 * @param files
	 */
	public static void selectWhile(String path) {
		File file = new File(path);
		if (file.exists()) {
			File[] files = file.listFiles();

			f1: for (int i = 0; i < files.length; i++) {
				File temp = files[i];
				// 屏蔽一些不检测的文件路径
				for (String s : containsList) {
					if (temp.getAbsolutePath().contains(s)) {
						// 如果当前路径包含指定的一些目录跳过这层循环执行下次循环
						continue f1;
					}
				}
				// 如果是文件
				if (temp.isFile()) {
					// 如果是文件证明没有下一级
					fileList.add(temp);
					// 先把数据全部读取出来,如果每次比较重新读取会读取N*N次 ,会非常慢
					dataList.put(temp.getAbsolutePath(), txtString(temp));
				} else {
					// 用递归找到文件
					selectWhile(temp.getPath());
				}
			}
		}
	}

	/**
	 * 找到所有没有引用的文件
	 */
	private static List<String> containWhil(String path) {

		List<String> resultList = new ArrayList<String>();
		s: for (int i = 0; i < fileList.size(); i++) {
			File file = fileList.get(i);
			// 判断是否包含当前类名
			Iterator<String> it = dataList.keySet().iterator();
			while (it.hasNext()) {
				String key = it.next();
				String value = dataList.get(key);
				// 比较是否是当前类, 并且内容里面不包含当前类名
				if (!key.equals(file.getAbsolutePath()) && value.contains(file.getName().split("\\.")[0])) {
					// 不添加到结果集合里,直接循环下一个类
					continue s;
				}
			}
			// 根目录文件不添加
			if (!file.getParent().equals(path)) {
				resultList.add(file.getAbsolutePath());
			}
		}
		return resultList;
	}

	public static String txtString(File file) {
		StringBuilder result = new StringBuilder();
		try {
			BufferedReader br = new BufferedReader(new FileReader(file));
			String s = null;
			while ((s = br.readLine()) != null) {
				result.append(s);
			}
			br.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result.toString();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值