悠悠楠杉
网站页面
正文:
在数据处理或日志分析场景中,经常需要从大型文本文件中快速定位多个关键词。Java提供了多种实现方式,但如何兼顾效率和资源消耗是关键。以下是两种经过验证的高效方法。
通过BufferedReader逐行读取文件,避免一次性加载大文件导致内存溢出,结合String.contains()或正则表达式匹配关键词:
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Arrays;
import java.util.List;
public class KeywordSearcher {
public static void searchFile(String filePath, List<String> keywords) {
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
for (String keyword : keywords) {
if (line.contains(keyword)) {
System.out.println("匹配到关键词 [" + keyword + "] 在行: " + line);
break; // 找到任意关键词即跳过剩余检查
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
List<String> keywords = Arrays.asList("error", "warning", "critical");
searchFile("system.log", keywords);
}
}若关键词需要模糊匹配(如忽略大小写),可预编译正则模式提升性能:
import java.util.regex.Pattern;
// 在searchFile方法内替换匹配逻辑:
Pattern pattern = Pattern.compile("error|warning|critical", Pattern.CASE_INSENSITIVE);
if (pattern.matcher(line).find()) {
System.out.println("匹配到关键词在行: " + line);
}Files.lines().parallel()并行流(需注意线程安全);MappedByteBuffer直接操作内存。通过合理选择方法,即使处理GB级日志文件,也能在秒级内完成多关键词定位。