读取大型文本文件

3

我目前遇到了一个使用Java 1.4读取相对较大文本文件的问题。

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

目前,我正在使用BufferedReader和FileReader方法逐行读取文件进行处理,但是我的应用程序服务器经过一段时间后总是会卡住。是否有更好的方法来读取文件并将其处理到我的数据库中?

谢谢。


1
为什么不分块读取文件并处理每个块(逐块处理)呢? :) - Buhake Sindi
抱歉,我对Java很友好。我想知道如何读取前1000行并进行处理,然后继续读取下一个1000行。 - Eddie Koh
我会尝试以块的方式读取文件,然后在另一个线程中对该块进行处理。在处理上一个块时,您可以继续进行输入/输出操作。 - Erkan Haspulat
1个回答

1
首先,如果可能的话,我不会使用Java 1.4。例如,如果您正在为Blackberry编写代码,则没有选择。 Java 5.0发布已有7年之久,即使是免费支持也已经终止。最新版本是Java 6更新26。
读取100 MB的文本不应该花费很长时间,应该不超过5秒钟。如果运行速度较慢,很可能是内存不足。在Java 6之前,内存不足可能导致系统变得越来越慢而不是失败。
如果您需要将数据加载到数据库中,建议您一次加载适量的数据。这样,您将能够像加载第一行一样快速地加载最后一行。
如果您要将一百万条记录加载到数据库中,请检查您的数据库速度。每次加载批处理,您可能能够每秒插入10K条记录,并在两分钟内插入一百万条记录。但是,一个配置不良的服务器每次只添加一行可能只能执行每秒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,但这个决定不是由我做出的。 - Eddie Koh
谢谢您的帮助。我也不想使用Java 1.4,但这个决定不是由我做出的。无论如何,您有什么方法可以分块加载数据吗? - Eddie Koh
@PuriKoh,如果您不喜欢我给的示例,能否说出您想要的不同之处? - Peter Lawrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接