import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; public class reguess { public static void main(String[] args) { String reg = "C:\\Program Files (x86)\\DingDing\\*.exe"; String regpath = getRegPath(reg); System.out.println(regpath); ArrayList<String> fileNameList = new ArrayList<>(); Pattern pattern = Pattern.compile("[^/]*[.]exe[^D]"); fileNameList = readFiles("C:\\Program Files (x86)\\DingDing\\",fileNameList,pattern); for (Object str: fileNameList ) { System.out.println(str); } } public static ArrayList<String> readFiles(String path, ArrayList<String> fileNameList, Pattern pattern) { File file = new File(path); if (file.isDirectory()) { File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { readFiles(files[i].getPath(), fileNameList,pattern); } else { String path1 = files[i].getName(); if(pattern.matcher(path1).find()){ fileNameList.add(files[i].getPath()); } } } } else { String path1 = file.getName(); if(pattern.matcher(path1).find()){ fileNameList.add(file.getPath()); } } return fileNameList; } private static String getRegPath(String path) { char[] chars = path.toCharArray(); int len = chars.length; StringBuilder sb = new StringBuilder(); boolean preX = false; for (int i = 0; i < len; i++) { if (chars[i] == '*') { if (preX) { sb.append(".*"); preX = false; } else if (i + 1 == len) { sb.append("[^/]*"); } else { preX = true; } } else { if (preX) { sb.append("[^/]*"); preX = false; } if (chars[i] == '?') { sb.append('.'); }else if (chars[i] == '.'){ sb.append("[.]"); }else { sb.append(chars[i]); } } } return sb.toString(); } }
文件通配符转译正则表达式
最新推荐文章于 2024-05-24 02:08:26 发布