我正在处理一个非常大的文本文件 (755Mb)。 我需要对行(大约 1890000)进行排序,然后将它们写回另一个文件。
我已经注意到讨论的起始文件与我的非常相似: Sorting Lines Based on words in them as keys
问题是我无法将这些行存储在内存中的集合中,因为我得到了 Java 堆空间异常(即使我最大程度地扩展了它)..(已经尝试过!)
我既不能用excel打开,也不能使用排序功能,因为文件太大,无法完全加载..
我考虑过使用 DB ..但我认为编写所有行然后使用 SELECT 查询就执行时间而言太长了..我错了吗?
任何提示表示赞赏 提前致谢
最佳答案
我认为这里的解决方案是使用临时文件进行合并排序:
读取第一个文件的前 n 行,(n 是您可以在内存中存储和排序的行数),对它们进行排序,并将它们写入文件
1.tmp
(或者您如何调用它)。对接下来的 n 行执行相同操作并将其存储在2.tmp
中。重复直到处理完原始文件的所有行。读取每个临时文件的第一行。确定最小的(根据你的排序顺序),写入目标文件,从对应的临时文件中读取下一行。重复直到处理完所有行。
删除所有临时文件。
这适用于任意大文件,只要您有足够的磁盘空间。
关于java - 在 java 中对巨大的 file.txt 的行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8832822/