1

信息 :

当我执行我的程序时,一个简单的文件阅读器,我得到一个异常。

我的文件保存在 .java 文件旁边。

输出 :

运行:
名称:Koen
得分:44
线程“main”中的异常 java.util.NoSuchElementException:找不到行
名称:Kevin
得分:55
at java.util.Scanner.nextLine(Scanner.java:1585)
at tetris.FileIO.loadHighscores (FileIO.java:41)
at tetris.FileIO.getLineScores(FileIO.java:28)
at tetris.FileIO.main(FileIO.java:62)
Java 结果:1
构建成功(总时间:0 秒)

代码:

package tetris;

import java.io.File;
import java.io.InputStream;
import java.io.Writer;
import java.util.Scanner;

public class FileIO   {
    private File file;
    private Scanner filescScanner, lineScanner;
    private Writer fileWriter, lineWriter;
    private String[][] data;

    public FileIO () {
        String[][] data = new String[100][1];
    }
    public String[][] getLineScores(){
        return this.loadHighscores(this.getClass().getResourceAsStream("LineHighscores.txt"));
    }
    public String[][] getTimeScores(){
        return this.loadHighscores(this.getClass().getResourceAsStream("TimeHighscores.txt"));
    }

    public String[][] loadHighscores( InputStream resourceStream){

        int x=0;
        String test = "";

        filescScanner = new Scanner(resourceStream);

        while((test=filescScanner.nextLine())!=null) {

            lineScanner = new Scanner(test);
            lineScanner.useDelimiter("-/-");
            System.out.println("name : "+lineScanner.next());
            System.out.println("score : " +lineScanner.next());

            x++;
        }
        lineScanner.close();
        filescScanner.close();
        return data;    
    }

    public static void main(String[] args){
        FileIO file = new FileIO();
        System.out.println(file.getLineScores());
    }
}
4

2 回答 2

4

当您调用 nextLine() 时:

 while((test=filescScanner.nextLine())!=null)

它抛出异常以指示扫描仪没有更多的输入行。因此,它永远不会返回 null。

尝试改为使用hasNextLine()来检查是否有下一行。

while(filescScanner.hasNextLine())
{
    test=filescScanner.nextline();
    ...
}

有下一行

公共布尔 hasNextLine()

返回:当且仅当此扫描仪有另一行输入(source)时为真

因此,当扫描仪没有更多的输入行读取时,hasNextLine()将返回false. 因此,终止循环。

于 2012-12-12T01:23:39.280 回答
0

如果我对您的理解正确,您希望 while 循环在文件中没有更多行可读取时终止。Scanner 类实现了一个 hasNextLine 方法,当有一行要读取时返回 true,否则返回 false。我认为您可以用scanner.hasNextLine() 替换while 条件,这将解决第41 行引发的NoElementException。我希望这个答案对您有所帮助。

好运尼古拉

于 2012-12-12T01:37:14.220 回答