【问题标题】:Scanner reading large file扫描仪读取大文件
【发布时间】:2013-11-06 13:46:29
【问题描述】:

出于学习目的,我正在使用 Scanner 类,我使用它来读取一个非常大的文件(大约 60.000 行)而不使用 Reader 类,它在大约 400 行后停止读取。我必须在 Scanner 的构造函数中使用 Bufferedreader 还是问题出在其他地方?我想知道为什么会这样。谢谢。 我的代码是输出所有行的常用代码。

File file1 = new File("file1");
Scanner in= new Scanner(file1);
while  (scan.hasNextLine()  ) {
String str = scan.nextLine();
System.out.println(str);
}

【问题讨论】:

  • 400 行之后有什么异常吗?你检查内存消耗了吗?
  • 在大文件上我建议你使用缓冲类..因为性能差异真的很大..
  • 可能是控制台没有输出所有行并截断了一些行。你在使用 BlueJ 吗?
  • 不,我正在使用 Eclipse。
  • 我今天遇到了同样的事情,文件有 25000 行。我切换到 BufferedReader 并且效果很好。我也有一台 64 位机器。

标签: java java.util.scanner


【解决方案1】:

这个问题通常在 64 位机器上更常见,或者文件大小超过 1-2 GB,并且与堆空间无关。切换到 BufferedReader 应该可以正常工作,

BufferedReader br = new BufferedReader(new FileReader(filepath));
String line = "";
while((line=br.readLine())!=null)
{
    // do something
}

【讨论】:

  • hm...其实我的机器是64位的,这是主要原因吗?
  • 这主要是由于您机器上的 JVM 实现造成的。
【解决方案2】:

我刚刚遇到了这个问题。似乎只需更改扫描仪结构即可。替换这个:

File file1 = new File("file1");
Scanner in= new Scanner(file1);

用这个:

FileReader file1 = new FileReader("file1");
Scanner in= new Scanner(file1);

当您在系统不知道它是文本文件的情况下从文件构建扫描仪时,可能会出现问题。

【讨论】:

    猜你喜欢
    • 2018-03-18
    • 2013-12-04
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多