【问题标题】:Fast way to alphabetically sort the contents of a file in java在java中按字母顺序对文件内容进行排序的快速方法
【发布时间】:2010-08-16 00:55:58
【问题描述】:

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

Adrian Graham   some more text here

John Adams     some more text here

那么需要为eg插入另一条记录。

Bob Something some more text here

我需要对文件进行排序,但这是一个相当大的文件,我不想一次将其完全加载到内存中。 我所说的大是指大约 500 000 行,所以可能不是特别大。

我搜索了一下,发现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 个 jars、主程序、一些实用程序和处理文件存储和检索的第 3 个 jar 我只有主程序的源代码......主 jar 和util jar 与第三个 jar 交互,这意味着我只能继承和覆盖各种方法,我在程序中发现了相当多的随机读写,这些方法还没有意义,这使得它变得更加困难只需剥离文件并插入数据库。这是一个写得很糟糕的软件,很明显他们没有打算再次对其进行改进......
  • 基本上,我看不到一种无需大规模重写即可简单地添加数据库的方法,而我试图避免这种方式。

标签: java sorting file-io


【解决方案1】:

您可能还想简单地调用 DOS“排序”命令来对文件进行排序。它速度很快,几乎不需要您进行任何编程。

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

【讨论】:

  • 这将是一个不错的技巧,但它在 ubuntu 桌面上运行...虽然我的开发环境是 windows :)
  • @robinsonc494,我不是ubuntu专家,但它没有类似的命令吗?
  • 应该可以,我去看看,谢谢。我不经常将 linux 用作桌面环境。所以我也不是专家,但我会在一分钟内检查一下,看看他们是否有这样的东西。再次感谢
【解决方案2】:

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

【讨论】:

  • 这是真的,但它是一个不断增长的文件,我想考虑未来的大小。
  • 也许试图解决一个不存在的问题是过早的优化。可能更好地监视应用程序。并等待看看速度和/或内存使用何时成为问题,然后修复它。
  • 关于过早优化的观点仍然存在,我至少需要对已经存在的数据进行排序
【解决方案3】:

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

然后对数据进行排序,并将其写回文件。 (或者干脆迁移到程序,所以它使用一个db)

【讨论】:

  • 我可能会试一试,尽管我上次与 hsqldb 的相遇并不愉快。
猜你喜欢
  • 2021-06-30
  • 2016-07-23
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 2021-12-11
  • 2017-11-19
相关资源
最近更新 更多