java.util.Scanner在读取大文件时出现故障

时间:2011-02-13 06:20:11

标签: java io java.util.scanner

我编写了一个程序,我使用扫描程序从日志文件中读取行并解析每一行以找到重要的内容。重要的是我读取日志文件的每一行。我编写了以下代码来扫描每一行

Scanner s = new Scanner(new File("Large.log"));
while(s.hasNextLine())
{
    String line = s.nextLine();
    //do the processing of the log line
}

上面的代码表现得很奇怪。它会在随机数行[大约100万行]之后停止读取行。我修改了上面的代码来检查最后一行读取,并使用Notepad ++检查了日志文件。在该特定行之后,文件中还有很多行。我在System.out.println(s.hasNextLine())循环结束后添加了另一个while,它打印为false。

但是,如果我尝试使用BufferedReader执行上述操作,该程序可以正常工作。 Java中的util IO类是否有任何限制?

2 个答案:

答案 0 :(得分:3)

这听起来像是您的特定JVM实现的large file support问题。对于许多不使用文件的标准文件I / O而言,这是一个常见的问题> 32位操作系统上4 GB。通常有文件API的替代版本来显式支持大文件,但实现JVM的人必须记住使用它们。出于好奇,您使用的操作系统是64位吗?

答案 1 :(得分:0)

我只是将一个包含50个字符的字符串转储到一个临时文件中,重复该字符串500万次。当我尝试逐行读取文件时,扫描仪对我来说很好。

我发现你的情况可能存在两个问题:

  1. 您可能正在尝试读取一条通过Scanner内部缓冲区大小读取一条线的大线?
  2. 虽然不太可能,但我希望不同的进程/线程不会对同一个文件进行并发修改。