我的实际要求是列出给定目录中包含搜索短语textToMatch的所有文件,最短时间约为4-5秒,其中文件数量可能高达100000或更多。
我不想要代码,我只想要一个最好的算法。
发布于 2016-11-16 16:22:26
由于您必须打开每个文件,因此您还可以使用工具构建来完成此特定任务。使用grep
我们有100000个文件需要查看。
% ls -l *.txt | wc -l
100000它们包含Vestibulum。
% grep Vestibulum 1.txt
Aenean commodo ultrices imperdiet. Vestibulum ut justo vel sapien venenatis tincidunt.
euismod ultrices facilisis. Vestibulum porta sapien adipiscing augue congue id pretium lectus计算包含Vestibulum的文件,计时。
% time grep -l Vestibulum *.txt | wc -l
100000
grep --color=auto -l Vestibulum *.txt 0,28s user 0,25s system 99% cpu 0,537 total
wc -l 0,00s user 0,01s system 1% cpu 0,537 total如你所见,这只需要在我的机器上运行一秒钟。
发布于 2016-11-16 19:40:38
你的程序必须处理两个问题:
对于1:您可以迭代或递归地搜索给定目录中的文件,或者让Java7或8通过使用FileVisitor或Apache Commons IO为您完成这项工作。
对于2:您可以使用Java Scanner或实现自己的非常快速的算法来搜索内部文件,称为Boyer-Moore算法。
https://stackoverflow.com/questions/40626780
复制相似问题