I’m trying to read the stdin in my Java program. I’m expecting a series of numbers followed by newlines, like:
6
9
1
When providing the input through the eclipse built-in console, everything goes well. But when using the Windows command line, the program prints:
Received '6'.
Received 'null'.
Invalid input. Terminating. (This line is written by another function that does an Integer.parseint()).
My code is:
static String readLineFromStdIn(){
try{
java.io.BufferedReader stdin = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
String input = new String();
input = stdin.readLine();
System.out.println("Received '" + input + "'");
return(input);
}catch (java.io.IOException e) {
System.out.println(e);
}
return "This should not have happened";
}
Any clues?
That you get a
nullindicates that the relevantReaderobjects reached an EOF (end of file), or in other words that they can’t get any more standard input. Now the obvious issues with your code are:readLineFromStdIn()will create a newBufferedReader.BufferedReaderwill be “competing” with each other for the same, shared input fromSystem.inBufferedReaderobjects are ever properly closed, so your program leaks I/O resources with each call toreadLineFromStdIn().The solution is to use a single shared
BufferedReaderobject for each invocation ofreadLineFromStdIn().