저는 약 106MB 크기의 디렉토리에 대해 매우 구체적인 패턴을 검색하기 위해 정규 표현식을 사용하고 있습니다. 완료하는 데 약 10 초가 걸립니다.패턴 검색 성능이 좋지 않음
성능을 향상시킬 수있는 방법이 있습니까? 반복 (각 파일에 대한) 귀하의 정규식 패턴을 컴파일
package com.JFileReader;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileData {
public static void main(String[] args) {
File dir = new File("/Users/me/Desktop/");
if(dir.isFile()) { handleFile(dir); }
if(dir.isDirectory()) { handleDir(dir); }
}
public static void handleFile(File aFile) {
String regex = "[a-zA-Z]+[.][a-zA-Z]+[@][a-zA-Z]+[.][a-zA-Z]+";
Pattern pattern = Pattern.compile(regex);
try {
BufferedReader br = new BufferedReader(new FileReader(aFile));
Matcher m;
String line;
while ((line = br.readLine()) != null) {
m = pattern.matcher(line);
if (m.find()) {
System.out.println("Found: " + aFile);
}
}
br.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public static void handleDir(File dir) {
for (File file : dir.listFiles()) {
if(file.isFile()) { handleFile(file); }
if(file.isDirectory()) { handleDir(file); }
}
}
}
패턴 검색의 경우 KMP 사용을 고려해야합니다. http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm – Algorithmist