Java - 打开大量文件并搜索单词的最佳方式?

Java - Best way to open a ton a files and search for a word?

我正在搜索一个包含大约 450 个文件的目录,每个文件大约 20kb。这是我的方法:

public void search(String searchWord) throws IOException
{
    this.directoryPath = FileSystems.getDefault().getPath(this.directoryString);
    this.fileListStream = Files.newDirectoryStream(this.directoryPath);
    int fileCount = 0;
    for(Path path : this.fileListStream)
    {
        String fileName = path.getFileName().toString();
        if(!fileName.startsWith("."))
        {
            BufferedReader br = Files.newBufferedReader(path, Charset.defaultCharset());
            String line;
            while((line = br.readLine()) != null)
            {
                System.out.println(fileName + ": " + line);
            }
            fileCount++;
            br.close();
        }
    }

    System.out.println("File Count: " + fileCount);
}

我的目标是逐字查找并找到 searchWord 的匹配项并打印出行号和找到它的文件名。

我的问题是我想知道是否应该将该行拆分为一个数组并在该数组中搜索单词并将其添加到列表中。或者我应该将整个文件扫描成一个单词数组,然后搜索单词并将它们添加到列表中?或者它甚至重要吗?另外,如果有更好的方法来做到这一点,请告诉我!由于资源有限,我正在尝试尽可能高效地执行此操作。

您可以使用 Scanner class 来解析文件并使用其 next() 方法读取每个单词,这样您就不需要任何数组或其他存储空间。尽可能为每个文件尝试使用多线程,这甚至可以提高性能。

您不应该逐字查看,只需将整行作为字符串读取,然后使用 String.indexOf() 方法查找该行是否包含该单词。