有没有办法重置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,提示我如何解决这个问题?我可以以某种方式重置流吗?谢谢你的帮助。
答案 0 :(得分:3)
我认为你在寻找:
InputStream originalInput = System.in;
System.setIn(new FileInputStream(FileDescriptor.in));
// Do stuff
System.setIn(originalInput);
但是,最好不要替换System.in
,只需让代码的其余部分使用输入流即可。