49

Hi I'm new to Java and I would like to know what is the best choice to read a user Input in the console, as far as I know there are 3 ways to do it:

  1. Console console = System.console();
  2. BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
  3. Scanner reader = new Scanner(System.in);

Which one should I choose? Why that one and not the other ones?

Daedric
  • 512
  • 3
  • 22
Victor Castillo Torres
  • 9,383
  • 6
  • 35
  • 45
  • 4
    For any trivial program, just use a Scanner. I've never seen Console used before, and use an InputStream/Reader when dealing with something like files. – lealand Jul 14 '13 at 06:21

3 Answers3

57

BufferedReader

  • Since Java 1.1
  • Throws checked exceptions
  • Can read chars, char arrays, and lines
  • Fast

Scanner

  • Since Java 1.5
  • Doesn't throw checked exceptions
  • Can read lines, whitespace-delimited tokens, regex-delimited tokens, and numbers
  • Difficult to read single characters

Console

  • Since Java 1.6
  • Doesn't throw checked exceptions
  • Can read lines
  • Underlying reader can read chars and char arrays (stops at line bounds)
  • Not always available (e.g. Eclipse)
  • Can read passwords (i.e. read without displaying the characters)

Recommendation: Scanner

The methods for reading numbers are very useful. The exceptions are unchecked, so you do not have to write boilerplate try/catch blocks.

Community
  • 1
  • 1
tom
  • 18,043
  • 6
  • 39
  • 36
  • 2
    also read the answers at http://stackoverflow.com/questions/2231369/scanner-vs-bufferedreader?rq=1 – KNU Mar 01 '14 at 09:15
  • Be careful with scanner, when you have new `Scanner(System.in)` and you close scanner, then System.in will be closed, too. If you want to use `new Scanner(System.in)` somewhere again, then trying to read user input will throw exception. Currently I am trying out `JLine`, what can read password to and prints given mask. – Michael Hegner Sep 01 '16 at 07:00
  • 1
    also with scanner if you mix nextInt() and nextLine(), one needs to be careful as nextLine() will remove the bnewline char from input but nextInt() will not! – Mangat Rai Modi Jul 26 '17 at 15:15
4

Console class is implemented in a platform independent way to handle the console input for different Os. All OS has a console/shell but they are quite different in implementation. So Console class gives you a Java platform independent runtime class to access things like password input, etc.

Scanner is used for parsing tokens from the contents of the stream while BufferedReader just reads the stream and does not do any special parsing.

Juned Ahsan
  • 63,914
  • 9
  • 87
  • 123
4

beside these you can also use datainputstream etc.

Now BufferedReader Read text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines. The buffer size may be specified, or the default size may be used. The default is large enough for most purposes.

Where Scanner is a simple text scanner which can parse primitive types and strings using regular expressions. A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace. The resulting tokens may then be converted into values of different types using the various next methods. Scanner is used for parsing tokens from the contents of the stream while BufferedReader just reads the stream and does not do any special parsing.

also check the below link it will surely help you.......

http://www.javawebtips.com/50474/

roanjain
  • 1,042
  • 3
  • 11
  • 30