【发布时间】:2016-04-14 05:21:47
【问题描述】:
目前,为了从文件中找到我想要的行,我正在逐行读取文件,直到我要查找的字符串与当前行匹配。
这似乎是一种不好的编码习惯,因为我的文件有 1000 多行;有没有办法告诉扫描仪或缓冲阅读器(或其他东西?)从给定行的字符创建字符串?
编辑:正如 ajb 指出的那样,这似乎在物理上是不可能的。
我想最好的解决方案是将整个文件读入 String[] 行。
【问题讨论】:
-
我真的看不出有什么办法可以扫描整个文件来找到你想要的。
-
在 Notepad++ 等编辑器中对性能进行基准测试,您会看到超过 100K 行的文件存在延迟。
-
除非您在 VMS 系统上(如果还有这些系统),文本文件将存储为字符序列,每行之间带有
\n或\r\n。没有任何“索引”或任何东西可以告诉系统每行的开头在哪里,或者任何其他有助于加快速度的元数据。这有点像如果我给你一本书并说“在书中找到第 1000 个'e'”。没有办法,只能从头开始计数。 -
如果您自己创建文本文件,则可以添加索引。如果您正在编写自己的文字处理器,该处理器将被优化以处理非常大的文件,也许您可以考虑这样的事情。但是您不能使用从任何地方获得的任意文本文件来执行此操作。实际上,您要创建的并不是真正的纯“文本”文件。它具有自定义格式,就像 .docx 或 .odt 文件有自己的格式一样。
-
如果您有非常大的文件,您可以将一个大文件拆分为多个较小的文件/块,并使用多个线程进行搜索/匹配。
标签: java string file-io java.util.scanner bufferedreader