Java 关于System.in和stream的问题
有没有办法重置System.in,这样我就可以有一个新的流,让扫描仪等待输入?这是我的密码:Java 关于System.in和stream的问题,java,java.util.scanner,Java,Java.util.scanner,有没有办法重置System.in,这样我就可以有一个新的流,让扫描仪等待输入?这是我的密码: boolean run = true; String commandLine = ""; Scanner keyboard; Tokenizer arguments; RecursiveDescentParser parse; while (run){ // Command prompt System.out.print
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,提示一个问题:如何解决此问题?我可以重新设置流吗?谢谢您的帮助。我想您正在寻找:
InputStream originalInput = System.in;
System.setIn(new FileInputStream(FileDescriptor.in));
// Do stuff
System.setIn(originalInput);
但是,最好不要在中替换
系统,只需将其余代码作为输入流使用。我想您正在寻找:
InputStream originalInput = System.in;
System.setIn(new FileInputStream(FileDescriptor.in));
// Do stuff
System.setIn(originalInput);
但是,最好不要替换系统。
,而只是让其余的代码使用一个输入流。请您详细解释一下,让其余的代码使用一个输入流是什么意思。@user633658:那么,System.in有什么特别之处?如果你真的需要重置它,这表明你正在其他地方使用它。该代码是否必须知道它正在使用System.in?您不能将System.in作为参数传递给构造函数或其他什么吗?问题是,代码是我只能从控制台读入数据或使用扫描仪重定向一次,因为System.in problems hasNextLine()无限期返回false。@user633658:但不清楚为什么需要重定向它以从文件读取。为什么不直接更改试图使用System.in的代码以直接使用该文件?您试图通过使用该文件实现什么?(您是否尝试过我建议的更改?)该代码通过收集控制台输入或用户可以重定向文件中的输入来工作。这不会是一个问题,但流的限制意味着控制台输入是一次性的,因此任何进一步的用户控制台输入都会因为流而失败。代码需要一致的用户输入,因为这是前端输入到主程序的控制台输入,但只能执行一次很糟糕。请您详细解释一下,让我的其余代码使用输入流是什么意思。@user633658:那么,System.in有什么特别之处?如果你真的需要重置它,这表明你正在其他地方使用它。该代码是否必须知道它正在使用System.in?您不能将System.in作为参数传递给构造函数或其他什么吗?问题是,代码是我只能从控制台读入数据或使用扫描仪重定向一次,因为System.in problems hasNextLine()无限期返回false。@user633658:但不清楚为什么需要重定向它以从文件读取。为什么不直接更改试图使用System.in的代码以直接使用该文件?您试图通过使用该文件实现什么?(您是否尝试过我建议的更改?)该代码通过收集控制台输入或用户可以重定向文件中的输入来工作。这不会是一个问题,但流的限制意味着控制台输入是一次性的,因此任何进一步的用户控制台输入都会因为流而失败。代码需要一致的用户输入,因为这是前端输入控制台输入到主程序中,但只能执行一次很糟糕。