关于System.in和stream的问题

时间:2011-02-25 06:21:58

标签: java java.util.scanner

有没有办法重置System.in所以我可以有一个新流来让Scanner等待输入?这是我的代码:

    boolean run = true;
    String commandLine = "";
    Scanner keyboard;

    Tokenizer arguments;
    RecursiveDescentParser parse;

    while (run){
        // Command prompt
        System.out.print(" ==>\t");

        keyboard = new Scanner(System.in);

        while (keyboard.hasNextLine()) {
              commandLine += " " + keyboard.nextLine();
        }

        keyboard.close();

        keyboard = null;

        System.setIn ( new FileInputStream ( FileDescriptor.in )  ) ;

        System.setIn(System.in);

        keyboard = new Scanner(System.in);

        arguments = new Tokenizer(commandLine);
        commandLine = "";
        parse = new RecursiveDescentParser(arguments, false);
        run = parse.parseStartSymbol();
    }           
} 

一旦这个程序运行一次,hasNextLine()将无限期地返回false,提示我如何解决这个问题?我可以以某种方式重置流吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

我认为你在寻找:

InputStream originalInput = System.in;
System.setIn(new FileInputStream(FileDescriptor.in));
// Do stuff
System.setIn(originalInput);

但是,最好不要替换System.in,只需让代码的其余部分使用输入流即可。