import java.io.File;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileCheck {
//檢查路徑
private final String checkPath;
//檢查子路徑
private final HashMap<String, String> childCheckPath = new HashMap<String, String>() {{
put("設計", "/sheji");
put("前后", "/qianhou");
}};
private List<String> files = new ArrayList<>();
private ArrayList<String> missFiles = new ArrayList<>();
private Map<String, ArrayList<String>> resultFile = new HashMap<>();
private String[] checkFile = {"RM.001_001", "RM.002_002", "RM.002_003"};
//正則匹配器
Pattern pattern = Pattern.compile("RM.\\d{3}_\\d{3}");
//構造函數
public FileCheck(String checkPath) {
/**
* @author Administrator
* @time 2017/12/16 16:17
* @method FileCheck
* @param [checkPath, 檢查路徑]
* @param [cheackName, 檢查名]
* @return
* @version V1.0.0
* @description description
*/
this.checkPath = checkPath;
Iterator iterator = childCheckPath.entrySet().iterator();
while (iterator.hasNext()){
files.clear();
missFiles.clear();
Map.Entry entry = (Map.Entry)iterator.next();
//得到所有文件
getFiles(this.checkPath+entry.getValue().toString());
//得到匹配文件
getHasFile();
//得到缺失文件
getMissFile(entry.getKey().toString());
}
}
//遍歷路徑得到所有文件
private void getFiles(String path) {
//判斷路徑是否存在
File file = new File(path);
if (!file.exists()) {
return;
}
//遞歸遍歷路徑下所有文件
for (File f : file.listFiles()) {
if (f.isFile()) {
files.add(f.getAbsolutePath());
} else {
getFiles(f.getAbsolutePath());
}
}
}
private void getHasFile() {
//匹配RM.922_001類型路徑
String regex = "RM.\\d{3}_\\d{3}";
String tmp = "";
Pattern pattern = Pattern.compile(regex);
Matcher matcher;
for (String f : files) {
matcher = pattern.matcher(f);
while (matcher.find()) {
tmp = matcher.group(0);
}
if (!"".equals(tmp)) {
missFiles.add(tmp);
}
}
}
private void getMissFile(String checkType) {
ArrayList<String> tmp = new ArrayList<>();
for (String file : checkFile) {
boolean isCheckExist = false;
for (String mfile : missFiles) {
if (file.equals(mfile)) {
isCheckExist = true;
}
}
if (!isCheckExist) {
tmp.add(file);
}
}
resultFile.put(checkType,tmp);
}
//主函數調用
public static void main(String[] args) {
FileCheck fileCheck = new FileCheck("D:\\裝機工具");
for (Map.Entry<String, ArrayList<String>> entry : fileCheck.resultFile.entrySet()) {
System.out.println("檢查類型:" + entry.getKey() + ",缺少:" + entry.getValue());
}
}
}