實際開發中常需根據正則條件查詢指定目錄下的文件。本文通過完整代碼示例,演示如何利用 Java 正則 API(Pattern、Matcher)結合 FileFilter 實現靈活的文件名匹配與遞歸收集。
// 用於緩存文件列表
private ArrayList files = new ArrayList();
// 文件路徑
private String _path;
// 未編譯的正則公式
private String _regexp;
class MyFileFilter implements FileFilter {
/** 匹配文件名稱 */
public boolean accept(File file) {
try {
Pattern pattern = Pattern.compile(_regexp);
Matcher match = pattern.matcher(file.getName());
return match.matches();
} catch (Exception e) {
return true; // 正則出錯時默認通過
}
}
}
/** 解析輸入流 */
FilesAnalyze(String path, String regexp) {
getFileName(path, regexp);
}
// Java正則表達式實現條件查詢
private void getFileName(String path, String regexp) {
_path = path;
_regexp = regexp;
File directory = new File(_path);
File[] filesFile = directory.listFiles(new MyFileFilter());
if (filesFile == null) return;
for (int j = 0; j < filesFile.length; j++) {
files.add(filesFile[j]);
}
}
/** 顯示輸出信息 */
public void print(PrintStream out) {
Iterator elements = files.iterator();
while (elements.hasNext()) {
File file = (File) elements.next();
out.println(file.getPath());
}
}
public static void output(String path, String regexp) {
FilesAnalyze fileGroup1 = new FilesAnalyze(path, regexp);
fileGroup1.print(System.out);
}
public static void main(String[] args) {
output("C:\\", "[A-z|.]*");
}
accept() 方法中編譯正則並匹配文件名,返回 true 表示保留。true,避免單個錯誤導致整個查詢失敗。Java 正則表達式在字符處理領域極其強大,「只要是字符處理,就沒有正則做不到的事」。掌握 Pattern、Matcher 與 FileFilter 的組合,能輕鬆應對各類文件條件查詢場景。