Chapter 13: I/O, Applets, and Other Topics 289
In Java, console input is accomplished by reading fromSystem.in. To obtain a character-
based stream that is attached to the console, wrapSystem.inin aBufferedReaderobject.
BufferedReadersupports a buffered input stream. Its most commonly used constructor
is shown here:
BufferedReader(ReaderinputReader)
Here,inputReaderis the stream that is linked to the instance ofBufferedReaderthat is being
created.Readeris an abstract class. One of its concrete subclasses isInputStreamReader,
which converts bytes to characters. To obtain anInputStreamReaderobject that is linked to
System.in, use the following constructor:
InputStreamReader(InputStreaminputStream)
BecauseSystem.inrefers to an object of typeInputStream, it can be used forinputStream.
Putting it all together, the following line of code creates aBufferedReaderthat is connected
to the keyboard:
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
After this statement executes,bris a character-based stream that is linked to the console
throughSystem.in.
Reading Characters
To read a character from aBufferedReader, useread( ). The version ofread( )that we will
be using is
int read( ) throws IOException
Each time thatread( )is called, it reads a character from the input stream and returns it as
an integer value. It returns –1 when the end of the stream is encountered. As you can see,
it can throw anIOException.
The following program demonstratesread( )by reading characters from the console
until the user types a"q.” Notice that any I/O exceptions that might be generated are
simply thrown out ofmain( ). Such an approach is common when reading from the console,
but you can handle these types of errors yourself, if you chose.
// Use a BufferedReader to read characters from the console.
import java.io.*;
class BRRead {
public static void main(String args[])
throws IOException
{
char c;
BufferedReader br = new
BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter characters, 'q' to quit.");