21/04/2014 Ebtsam AbdelHakam 1 OBJECT ORIENTED PROGRAMMING Lecture 11.1 I/O Streams
21/04/2014 Ebtsam AbdelHakam 2 Outline I/O Basics Streams Reading characters and string
21/04/2014 Ebtsam AbdelHakam 3 I/O Basics Using print( ) and println( ), none of the I/O methods have been used significantly. As the most real applications of Java are not text-based, console applications. There are graphically/windows applications that rely upon Java s Abstract Window Toolkit (AWT) or Swing for interaction with the user. Although text-based programs are excellent as teaching examples.
21/04/2014 Ebtsam AbdelHakam 4 Streams Java programs perform I/O through streams. A stream is an abstraction that either produces or consumes information. A stream is linked to a physical device by the Java I/O system. Thus, the same I/O classes and methods can be applied to any type of device. (i.e. input /output from/to a disk file, a keyboard, or a network socket). Java implements streams within class hierarchies defined in the java.io package.
21/04/2014 Ebtsam AbdelHakam 5 Input Streams Output Streams
21/04/2014 Ebtsam AbdelHakam 6 Byte Streams and Character Streams Java defines two types of streams: byte and character. Byte streams provide a convenient means for handling input and output of bytes. Byte streams are used, for example, when reading or writing binary data (images, executable code.class files) Character streams provide a convenient means for handling input and output of characters. They use Unicode ( HTML files, Text files). Also, in some cases, character streams are more efficient than byte streams.
21/04/2014 Ebtsam AbdelHakam 7 The Byte Stream Classes Byte streams are defined by using two abstract classes: InputStream and OutputStream. Each of these abstract classes has several concrete subclasses that handle the differences between various devices, such as disk files, network connections, and even memory buffers. Two of their important methods are read( ) and write( ), which, respectively, read and write bytes of data. Both methods are declared as abstract inside InputStream and OutputStream. They are overridden by derived stream classes.
21/04/2014 Ebtsam AbdelHakam 8 The Byte stream Classes
21/04/2014 Ebtsam AbdelHakam 9 The Character Stream Classes Character streams are defined by using two abstract classes: Reader and Writer. These abstract classes handle Unicode character streams. Two of their important methods are read( ) and write( ), which read and write characters of data, respectively. These methods are overridden by derived stream classes.
21/04/2014 Ebtsam AbdelHakam 10 The Character Stream Classes
21/04/2014 Ebtsam AbdelHakam 11 The Predefined Streams All Java programs automatically import the java.lang package that includes a class called System. System also contains three predefined stream variables: in, out, and err. They are declared as public, static, and final within System. i.e. they can be used by any other code and without using a specific System object. System.out refers to the standard output stream. By default, this is the console. System.in refers to standard input, which is the keyboard by default. System.err refers to the standard error stream, which also is the console by default. However, these streams may be redirected to any compatible I/O device. System.in is an object of type InputStream; System.out and System.err are objects of type PrintStream.
21/04/2014 Ebtsam AbdelHakam 12 Reading Characters from console In Java, console input is accomplished by reading from System.in. To obtain a character based stream that is attached to the console, wrap System.in in a BufferedReader object. BufferedReader supports a buffered input stream. By using the following line of code creates a BufferedReader that is connected to the keyboard: BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); InputStreamReader is one of Reader subclasses, which converts bytes to characters. To obtain an InputStreamReader object that is linked to System.in, use the following constructor: InputStreamReader(System.in)
21/04/2014 Ebtsam AbdelHakam 13 Reading Characters from console To read a character using a BufferedReader: Use read( ) method. 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. It can throw an IOException.
21/04/2014 Ebtsam AbdelHakam 14 Example 1 The following program demonstrates read characters from the console until the user types a "q.
21/04/2014 Ebtsam AbdelHakam 15 Example 1 Output run: 1 1 2 2 c c q q BUILD SUCCESSFUL (total time: 15 seconds)
21/04/2014 Ebtsam AbdelHakam 16 Reading Strings To read a string from the keyboard, use the version of readline( ) that is a member of the BufferedReader class. String readline( ) throws IOException It read line by line. It returns a String object. It can throw IOException.
21/04/2014 Ebtsam AbdelHakam 17 Example 2 The following program reads and displays lines of text until you enter the word stop :
21/04/2014 Ebtsam AbdelHakam 18 Example 3 Output run: here here one one two two stop stop BUILD SUCCESSFUL (total time: 19 seconds)