答案:使用BufferedReader逐行读取适合大文件,通过String.contains()匹配关键字;Files.readAllLines适用于小文件,一次性加载并遍历查找。

在Java中查找文件中的指定关键字,可以通过读取文件内容并逐行或整体匹配目标字符串来实现。下面介绍几种常用方法,适用于不同场景。
使用BufferedReader逐行读取查找
适合处理大文件,避免一次性加载全部内容到内存。
基本思路:使用BufferedReader读取文件每一行,用String.contains()判断是否包含关键字。
示例代码:
立即学习“Java免费学习笔记(深入)”;
import java.io.*; import java.nio.file.*; public class KeywordSearch { public static void searchInFile(String filePath, String keyword) { try (BufferedReader reader = Files.newBufferedReader(Paths.get(filePath))) { String line; int lineNumber = 0; while ((line = reader.readLine()) != null) { lineNumber++; if (line.contains(keyword)) { System.out.println("第 " + lineNumber + " 行: " + line.trim()); } } } catch (IOException e) { System.err.println("读取文件出错:" + e.getMessage()); } } public static void main(String[] args) { searchInFile("data.txt", "Java"); } }
使用Files.readAllLines一次性读取
适合小文件,代码简洁。
将整个文件读入内存,然后遍历每一行进行匹配。
 import java.nio.file.*; import java.util.List;  public class SimpleSearch {     public static void search(String filePath, String keyword) {         try {             List<String> lines = Files.readAllLines(Paths.get(filePath));             for (int i = 0; i < lines.size(); i++) {                 if (lines.get(i).contains(keyword)) {                     System.out.println("找到于第 " + (i + 1) + " 行: " + lines.get(i));                 }             }         } catch (IOException e) {             System.err.println("文件读取失败:" + e.getMessage());         }     } } 
支持正则表达式和忽略大小写
如果需要更灵活的匹配(如忽略大小写、模糊匹配),可以使用正则表达式。
示例:忽略大小写查找
 // 在判断条件中使用正则 if (line.toLowerCase().contains(keyword.toLowerCase())) {     // 匹配成功 } 
或使用Pattern类进行复杂匹配:
 import java.util.regex.*;  Pattern pattern = Pattern.compile(Pattern.quote(keyword), Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(line); if (matcher.find()) {     System.out.println("匹配到: " + line); } 
基本上就这些。根据文件大小选择合适的方法,小文件用readAllLines更方便,大文件建议用BufferedReader逐行处理,避免内存溢出。同时注意异常处理和路径正确性。不复杂但容易忽略细节。