我正在尝试使用以下代码使用Scanner Object读取文件 -
public void read(){
Scanner scanner = new Scanner(dataFile).useDelimiter("\n");
String line;
int i = 0;
while(scanner.hasNext()){
line = scanner.next();
i++;
}
System.out.println(i);
}
我想要读取的文件有117000行,其中扫描程序只读取前59550个奇数行。它不会抛出任何异常而只是返回。
当我更改实现以使用BufferedReader时,它会读取所有117000行 -
public void read(){
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(dataFile)));
String line;
int i=0;
while((line = br.readLine())!= null){
i++;
}
System.out.println(i);
}
任何人都可以解释为什么扫描仪无法读取所有行吗?
答案 0 :(得分:1)
以下程序适合我:
Scanner scanner = new Scanner(dataFile);
String line;
int i = 0;
while(scanner.hasNextLine()){
line = scanner.nextLine();
// System.out.println(line); // remove comment for debug
i++;
}
System.out.println(i);
scanner.close();
原始计划的变更是:
system.out.println
应为System.out.println
答案 1 :(得分:0)
可能与扫描仪使用的行结尾,分隔符有关。
您应该使用以下方法:
hasNextLine() and nextLine()
答案 2 :(得分:0)
一个可能的原因可能是Scanner
的(1KB)缓冲区限制小于BufferedReader
(8KB)。
答案 3 :(得分:0)
任何人都可以解释为什么扫描仪无法读取所有行吗?
br.readLine
还会选择以\r
(而不是\n
)结尾的行。这是与您的扫描仪的一个重要区别,只能读取\n
行。