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

标签 java sorting text-files lines

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

我已经注意到讨论的起始文件与我的非常相似: Sorting Lines Based on words in them as keys

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

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

我考虑过使用 DB ..但我认为编写所有行然后使用 SELECT 查询就执行时间而言太长了..我错了吗?

任何提示表示赞赏 提前致谢

最佳答案

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

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

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

  3. 删除所有临时文件。

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

关于java - 在 java 中对巨大的 file.txt 的行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8832822/

相关文章:

C# 从文本文件登录系统错误

java - 如何将 InputStream() 转换为 Java Scanner()

java - 试图让 Elasticsearch 运行

java - 在 Spring Boot 中使用 MockMvc 进行测试

java - 显示通话中的拨号盘 - 通话时调用号码 - DTMF

python - 如何提高 python 中的合并排序速度

java - 使用另一个 Map 中的值按键对 Map 进行排序

javascript - 使用 jQuery 和 Laravel 对数据进行排序的最佳方式?

python - 无法将字符串转换为 float - 从文件中读取

c++ - 如果 C++ 中不存在文件夹,如何创建文件夹?