Possible Duplicate:
exception while Read very large file > 300 MB
现在,我想从一个大文件(>=300M)中搜索一个字符串。由于文件太大,无法将其加载到内存中。
可以提供哪些方法来处理这个问题?
谢谢
最佳答案
有几个选项:
- 根据您的目标操作系统,您也许可以将此任务移交给系统实用程序,例如 grep (它已经针对此类工作进行了优化)并简单地解析输出。
- 即使文件小到足以包含在内存中,您也必须以任何方式从磁盘读取它。因此,您可以简单地读入它,一次一行,然后将字符串与读取的内容进行比较。如果您的应用只需要查找目标文件中字符串的第一次出现,那么这样做的好处是,如果目标字符串出现在文件的早期,您就不必读取整个文件了查找文件前半部分中的内容。
- 除非您对应用程序的内存使用量有上限(即它必须绝对适合 128 MB RAM 等),否则您还可以增加启动应用程序时 JVM 将占用的 RAM 量。但是,由于这种方法效率低下(就时间和磁盘 I/O 而言,如 #2 中所述),无论文件大小如何,这都不太可能是您想要采取的方法。<
关于java:如何在大文件中搜索字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9195856/