在java中按字母顺序对文件内容进行排序的快速方法

时间:2010-08-16 00:55:59

标签: java sorting file-io

根据每行的前X个字符数量,有人可以推荐一种快速方法对文本文件的内容进行排序吗? 例如,如果我在文本文件中有以下文本

Adrian Graham   some more text here

John Adams     some more text here

然后需要插入另一条记录,例如

Bob Something some more text here

我需要保持文件排序,但这是一个相当大的文件,我宁愿不立即将其完全加载到内存中。 大的意思是大约50万行,所以也许不是很大。

我进行了搜索,发现http://www.codeodor.com/index.cfm/2007/5/14/Re-Sorting-really-BIG-files---the-Java-source-code/1208 我想知道是否有人可以建议任何其他方式?为了获得第二意见?

在我阅读上述链接文章之前,我的初步想法是:

阅读文件

将其拆分为多个文件,例如A到Z

如果一行以“a”开头,则将其写入名为A.txt的文件

然后每个文件都对其内容进行排序(不清楚除了字母顺序之外还不清楚)

然后说到读取数据,我知道如果我想找到一个以A开头的行,那么我打开A.txt 插入新行时,同样的事情适用,我只是附加到文件的末尾。插入后有时间我可以调用我的排序程序来重新排序附加了东西的文件。

我意识到这里存在一些缺陷,例如。不会有偶数个以特定字母开头的行,因此某些文件可能比其他文件大。

这就是为什么我需要第二意见,以获得有关如何处理这个问题的建议? 当前的程序是在java中,但任何编程语言都可以用于实现这一目的的一个例子......我将移植我需要的东西。

(如果有人想知道我不是故意通过这种方式存储信息让自己头疼,我继承了一个痛苦的小程序,它将数据存储到文件而不是使用某种数据库) 提前致谢

3 个答案:

答案 0 :(得分:2)

您可能还想简单地调用DOS“sort”命令来对文件进行排序。它很快,您无需编程就可以了。

在DOS框中,键入help sort|more以获取排序语法和选项。

答案 1 :(得分:1)

500,000应该真的不那么重要。将整个内容读入内存,然后使用标准内置函数对其进行排序。我真的发现这些太慢了,然后转向更复杂的东西。每行500,000行×约60字节仍然只有30兆。

答案 2 :(得分:0)

另一种选择可能是读取文件并将其放在轻量级数据库中(例如hsqldb in file mode

然后将数据排序,并将其写回文件。 (或者只是迁移到程序,因此它使用db)