eclipse删除没有引用的文件

来源:互联网 发布:淘宝店怎么免费推广 编辑:程序博客网 时间:2024/06/05 00:36
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();}}

0 0