扫描仪读取大文件

not*_*ill 7 java java.util.scanner

我正在玩Scanner类用于学习目的,我使用它来读取一个非常大的文件(60.000行aprox)而不使用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);
}
Run Code Online (Sandbox Code Playgroud)

Ank*_*agi 6

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

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


bei*_*nai 6

我刚刚经历过这个问题。看来只要改变扫描仪的结构就可以了。替换这个:

File file1 = new File("file1");
Scanner in= new Scanner(file1);
Run Code Online (Sandbox Code Playgroud)

有了这个:

FileReader file1 = new FileReader("file1");
Scanner in= new Scanner(file1);
Run Code Online (Sandbox Code Playgroud)

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