扫描程序读取行返回NoSuchElementException

时间:2014-08-22 09:52:22

标签: java io

这是我第一次使用StackOverflow。我正在尝试读取一个文本文件,该文件由第一行的第一个数字组成。

try {
    Scanner s = new Scanner(new File("HighScores.txt"));
    int temp =Integer.parseInt(s.nextLine());
    s.close();
    return temp;
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

然而,我收到错误:

java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at GameStart.getHighScore(GameStart.java:334)
    at GameStart.init(GameStart.java:82)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

我知道HighScores.txt不是空的,为什么会出现这个问题?我尝试使用BufferedReader,而BufferReader.readLine()返回null。

3 个答案:

答案 0 :(得分:0)

您应该按照以下方式更正您的代码

Scanner s = new Scanner(new File("HighScores.txt"));
int temp=0;
while(s.hasNextLine){
  temp =Integer.parseInt(s.nextLine());
}

如果没有下一行,则s.nextLine()将不会执行。在这种情况下,输入文件中似乎没有行(空文件)。

答案 1 :(得分:0)

Scanner吞下错误。使用ioException方法检查它们。

Scanner s = new Scanner(new File("HighScores.txt"));
if(!s.hasNextLine()) {
  System.out.println(s.ioException());
}

答案 2 :(得分:-1)

  

我正在尝试读取一个文本文件,该文件由第一行的第一个数字组成。

我想知道您的文件是否以行分隔符结尾?

来自Javadoc:

  

由于此方法继续搜索输入以查找行分隔符,因此如果没有行分隔符,它可以缓冲搜索要跳过的行的所有输入。

因此,如果文件中只包含该编号,则扫描程序可能会因缺少换行符(或类似字符)而感到困惑。

修改 我可能使用了错误的Javadoc摘录来支持这篇论文。 Javadoc还说:

  

该位置设置为下一行的开头。

如果没有下一行怎么办?也许这正是扫描仪试图告诉你的。