从Java System.in发出读取输入 [英] Issue reading input from Java System.in
本文介绍了从Java System.in发出读取输入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试编写一个方法,提示用户在命令行输入并从stdin读取其输入为String并返回。第一次调用它时,一切正常。之后对getInput()的所有调用都不会返回任何内容。
I am trying to write a method that prompts a user for input on the command-line and reads their input as a String from stdin and returns in. The first time I call it, everything works properly. All calls to getInput() afterwards just return nothing.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Prompts the user for input and reads from standard input (stdin).
* Note: Always check if the return is null!
*
* @param description Describes the user input.
* @return A String of the input, or null when failed.
*/
private String getInput(String description)
{
System.out.print(description + ": ");
String input = null;
InputStreamReader stream = null;
BufferedReader reader = null;
try {
// Open a stream to stdin
stream = new InputStreamReader(System.in);
// Create a buffered reader to stdin
reader = new BufferedReader(stream);
// Try to read the string
input = reader.readLine();
// Exhaust remainder of buffer
while (reader.skip(1) > 0) {
// Do nothing
}
} catch (IOException e) {
e.printStackTrace();
// Error reading input
} finally {
// Clean up readers and streams
try {
if (reader != null) {
reader.close();
}
if (stream != null) {
stream.close();
}
} catch (IOException e) {
}
}
System.out.print("\n");
return input;
}
/**
* Display the login prompt.
*/
private boolean promptLogin()
{
// prompt for user name and password
String user = getInput("Enter username");
String pass = getInput("Enter password");
if (user == null || pass == null) {
System.out.println("Invalid login information.");
return false;
}
// ..
}
推荐答案
您不得关闭标准输入流;这是它第一次工作的原因
You must not close the Standard Input Stream; this is the reason it works only the first time
/**
* Prompts the user for input and reads from standard input (stdin).
* Note: Always check if the return is null!
*
* @param description Describes the user input.
* @return A String of the input, or null when failed.
*/
private String getInput(String description) {
System.out.print(description + ": ");
String input = null;
InputStreamReader stream = null;
BufferedReader reader = null;
try {
// Open a stream to stdin
stream = new InputStreamReader(System.in);
// Create a buffered reader to stdin
reader = new BufferedReader(stream);
// Try to read the string
input = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return input;
}
/**
* Display the login prompt.
*/
private boolean promptLogin() {
// prompt for user name and password
String user = getInput("Enter username");
String pass = getInput("Enter password");
if (user == null || pass == null) {
System.out.println("Invalid login information.");
return false;
}
return true;
}
这篇关于从Java System.in发出读取输入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文