在java中对巨大的file.txt进行排序

Luc*_*lli 7 java sorting lines text-files

我正在使用一个非常大的文本文件(755Mb).我需要对行(约1890000)进行排序,然后将它们写回另一个文件中.

我已经注意到有一个起始文件的讨论与我的相似: 排序行根据其中的单词作为键

问题是我无法将行存储在内存中的集合中,因为我得到了Java堆空间异常(即使我最大限度地扩展它)..(已经尝试过!)

我不能用excel打开它并使用排序功能,因为文件太大而且无法完全加载..

我想过使用DB ..但是我认为编写所有行然后使用SELECT查询它在执行时间方面太长了......我错了吗?

任何提示赞赏提前谢谢

cel*_*chk 15

我认为这里的解决方案是使用临时文件进行合并排序:

  1. 读取第一个文件的前n行(n是你可以在内存中存储和排序的行数),对它们进行排序,然后将它们写入文件1.tmp(或者你可以调用它).对接下来的n行执行相同操作并将其存储2.tmp.重复,直到处理完原始文件的所有行.

  2. 阅读每个临时文件的第一行.确定最小的一个(根据您的排序顺序),将其写入目标文件,并从相应的临时文件中读取下一行.重复,直到处理完所有行.

  3. 删除所有临时文件.

只要您有足够的磁盘空间,这适用于任意大文件.