NoSuchElementException:在文本文件中读取时找不到行

时间:2015-04-24 03:12:55

标签: java text-files java.util.scanner

我目前正致力于构建一个文本冒险游戏,我在尝试阅读包含房间描述的文本文件时遇到了问题。每当我运行程序时,我都可以正确读入并分配第一个文本文件,但第二个文件会抛出以下错误...

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1540)
    at Input.getInput(Input.java:9)
    at Room.buildRoom(Room.java:92)
    at Main.main(Main.java:19)

我完全不确定导致这种情况的原因。我试过移动东西,但无济于事。下面是我正在调用房间对象本身的功能,以便为其分配所有信息。

public void buildRoom(int num, String name, Room north,
        Room south, Room east, Room west) throws FileNotFoundException {
    System.out
            .println("Please input the location of the file you'd like to read in. Please note that you must read in the files in numerical order, or your game will not work.");

    String input = Input.getInput();

    File file = new File(input);
    Scanner reader = new Scanner(file);

    String description = reader.next();
    this.setDescription(description);

    this.setNorthExit(north);
    this.setSouthExit(south);
    this.setEastExit(east);
    this.setWestExit(west);
    reader.close();
}

任何帮助,弄清楚为什么会发生这种情况将非常感激。如果您有任何问题可以随意提出,我会尽我所能回答。

编辑:输入功能如下......

public static String getInput() {

    System.out.print("> ");
    Scanner in = new Scanner(System.in);
    String input = in.nextLine();
    input.toLowerCase();
    in.close();
    return input;
}

1 个答案:

答案 0 :(得分:1)

每次调用getInput方法时都不要继续关闭std输入。 Scanner::close关闭基础流。

在外面创建Scanner并继续使用它。在它生存的地方创建它,直到你最后一次调用getInput

Scanner对象传递给getInput方法。

Scanner sc = new Scanner(System.in);
while(whatever)
{
     String s = getInput(sc);
     ....

}
sc.close();

public static String getInput(Scanner in) 
{
    System.out.print("> ");
    String input = in.nextLine();
    input.toLowerCase();
    return input;
}