与Stream关闭有关的奇怪错误

时间:2014-11-14 00:41:24

标签: java input stream java.util.scanner bufferedreader

我正在学习Java,我写了一个方法来更新文件中的记录。我遇到的问题是,当我询问用户是否要查找另一个文件时,我的阅读器已关闭或无法为其分配任何输入。

protected boolean Update() throws InputMismatchException
{
    RoomService Init =new RoomService();
    Scanner input = new Scanner(System.in);

        try {
            boolean ans= true;

         while(ans)
         {
            System.out.println("Please enter room number.");
            String id = input.next();
            Init.Update(id);
            System.out.println("Press Enter to Add more or no to exit");
            String choice = input.nextLine();// Skips this line 
                if (choice.equalsIgnoreCase(""))
                {
                    continue;
                }
                else if(choice.equalsIgnoreCase("no"))
                {
                    ans= false;
                }
                  else 
                  {
                      System.err.println("Wrong input");
                        throw new IOException();
                  }
         }

        } catch (IOException e) {
            e.printStackTrace();
            fail=true;
        }
    return fail;
}

想知道究竟是什么阻止我输入任何我使用过的BufferedReader input = new BufferedReader(new InputStreamReader (System.in))

感谢。

编辑:

使用扫描程序错误是:java.util.NoSuchElementException

使用BufferedReader错误是:java.io.IOException:Stream closed

1 个答案:

答案 0 :(得分:1)

如果您的代码中还有其他地方,您使用的是Scanner System.in,请确保不要在其上调用close()Scanner本身没有需要关闭的资源,除非你想要关闭基础输入源,Scanner缠绕System.in,你不要这样做,因为这会阻止所有未来的输入。