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();
}
}
eclipse删除没有引用的文件
最新推荐文章于 2025-03-18 11:20:04 发布
