使用扫描仪从文件中读取?这段代码有什么问题?

时间:2014-09-21 19:03:49

标签: java java.util.scanner

当我尝试运行它时,我的代码一直给我这个错误消息。

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at readingFile.readFile(readingFile.java:18)
    at apples.main(apples.java:6) 

您认为这是什么问题?这样做时我正在观看buckys教程。它对他有用,但不适合我。

import java.io.*;
import java.util.Scanner;

public class readingFile {
    private Scanner x;

    public void openFile() {
        try {
            x = new Scanner(new File("C:\\Users\\Ike\\Desktop\\chinese.txt"));
        }
        catch(Exception e) {
            System.out.println("could not find file");
        }
    }

    public void readFile() {
        while(x.hasNext()) {
            String a = x.next();
            String b = x.next();
            String c = x.next();

            System.out.printf("%s %s %\n", a,b,c);
        }
    }

    public void closeFile() {
        x.close();
    }
}

1 个答案:

答案 0 :(得分:1)

每次调用next()时,您都会将扫描仪指针移动到下一个匹配的模式。因此,您需要在每次hasNext()来电之前检查next()

像这样,

    while(x.hasNext()) {
        System.out.print(x.next());
    }
    System.out.println();
  

next()和hasNext()方法及其原始类型的伴侣   方法(如nextInt()和hasNextInt())首先跳过任何输入   匹配分隔符模式,然后尝试返回下一个   令牌。 hasNext和next方法都可能阻止等待进一步   输入。 hasNext方法块是否与or无关   不是它相关的下一个方法会阻止。[Java doc reference]