【问题标题】:Reading Large Text File读取大文本文件
【发布时间】:2011-07-01 10:02:42
【问题描述】:

我目前在使用 java 1.4 读取相对较大的文本文件时遇到问题。

我正在尝试读取每行 100 个字符的文本文件,该文件可以达到 100 万行或更多行。

目前我正在使用带有文件读取器方法的 BufferedReader 逐行读取文件进行处理,但我的应用服务器在一段时间后总是挂在我身上。有没有更好的方法来读取文件并处理到我的数据库中?

谢谢

【问题讨论】:

  • 为什么不读取块中的文件并处理该块(逐块处理)。 :)
  • 对不起,我对java很好。我想知道如何阅读前 1000 行和过程。之后我继续阅读下 1000 行
  • 我会尝试分块读取文件,然后在另一个线程中处理该块。在处理前一个块的同时,您可以继续执行 i/o。

标签: java


【解决方案1】:

首先,如果可能的话,我不会使用 Java 1.4。例如如果您正在为 Blackberry 编写代码,则别无选择。 Java 5.0 是 7 年前发布的,甚至它也已终止免费支持。最新版本是 Java 6 update 26。

阅读 100 MB 的文本不应该花费很长时间,我应该需要超过 5 秒。如果您运行缓慢,则可能是内存不足。在 Java 6 之前,内存不足可能会导致系统运行速度越来越慢而不是失败。

如果您需要将数据加载到数据库中,我建议您一次加载适度的数据部分。这样,您将像第一行一样快速加载最后一行。

如果要将一百万个条目加载到数据库中,则需要检查数据库的速度。一次加载批次,您可能每秒可以插入 10K 条记录,并在两分钟内插入 100 万条记录。但是,配置不佳的服务器一次添加一行可能每秒只能执行 100 条记录,耗时 3.5 小时。

假设你想每 1000 行处理一些数据。

List<String> lines = new ArrayList<String>();
String line;
while((line = br.readLine()) != null) {
    lines.add(line);
    if(lines.size() >= 1000) {
       process(lines);
       lines.clear();
    }
}
process(lines); // get the last lines.

【讨论】:

  • 感谢您的帮助。我也不想使用 java 1.4,因为我别无选择,也不是我做的决定。
  • 感谢您的帮助。我也不希望使用 java 1.4,因为我别无选择,而且决定不是由我做出的。无论如何,您知道如何按块加载数据吗?
  • @PuriKoh,如果你不喜欢我给出的例子,你能说你想要什么不同吗?
猜你喜欢
  • 2011-03-30
  • 1970-01-01
  • 2017-01-21
  • 2013-09-01
  • 2019-02-01
  • 2019-03-12
  • 1970-01-01
相关资源
最近更新 更多