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-01-08 10:26:29 发布
该博客展示了一个Java程序,用于在指定目录下查找所有.exe文件,并使用正则表达式处理通配符。程序遍历目录,递归查找文件,并打印匹配的文件路径。同时,它还包含一个方法将Windows风格的通配符转换为正则表达式。

1551

被折叠的 条评论
为什么被折叠?



