I/O Basics
- As we uses print() and println() methods to display the content in text format and in console but those are not used in real world java programs as they are using frameworks like swing, The AWT which are the java Graphical User interfaces(GUI).
- To obtain this java uses I/O system (Input/output) from java io package which is cohesive and consistent.
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.
All streams will perform same operations even if the physical devices which they linked are differ.
This means that an input stream can abstract many different kinds of input: from a disk file, a keyboard, or a network socket. Likewise, an output stream may refer to the console, a disk file, or a network connection.
Java implements streams within class hierarchies defined in the java.io package.
Byte Streams and Character Streams
Java defines two types of Streams.
Byte streams- It provide a convenient means for handling input and output of bytes. Byte streams are used, for example, when reading or writing binary data.
Character streams- provide a convenient means for handling input and output of characters. They use Unicode so can be internationalized.
This were added in java 1.1 version but mostly byte streams are using than character streams.
The Byte Stream Classes
- Byte streams are defined by using two class hierarchies.
- At the top are two abstract classes : InputStream and OutputStream.
- These abstract classes have sub classes which handles the differences among various devices, such as disk files, network connections, and even memory buffers.
- The byte stream classes in java.io are
The abstract classes InputStream and OutputStream define several key methods that the other stream classes implement.
The two mainly are read() and write() which reads and write the data of byte type.
These methods must be override by the stream classes.
The Character Stream Classes
- Character streams are defined by using two class hierarchies.
At the top are two abstract classes: Reader and Writer.
These abstract classes handle Unicode character streams.
Java has several concrete subclasses of each of these.
The character stream classes in java.io are shown
The abstract classes Reader and Writer define several key methods that the other stream classes implement.
The two mainly are read() and write() which reads and write the data of byte type.
These methods must be override by the stream classes.
The Predefined Streams
- All Java programs automatically import the java.lang package.
- This package defines a class called System, which encapsulates several aspects of the run-time environment.
- Using these methods we can get the properties associated with the System like sysdate.
System also contains three predefined stream variables: in, out, and err.
These fields are declared as public, static, and final within System. This means that they can be used by any other part of your program and without reference to a specific System object.
System.out- standard output stream which is console by default, is an object of type InputStream;.
System.in- Standard input Stream, which is from keyboard by default,is an object of type PrintStream
System.err- the standard error stream, which also is the console by default, is an object of PrintStream.
Even though they are typically used to read and write characters from and to the console.
Reading Console Input
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(Reader inputReader)
- inputReader is the stream that is linked to the instance of BufferedReader that is being created. Reader is an abstract class.
InputStreamReader(InputStream inputStream)
- InputStreamReader, which converts bytes to characters. This will obtain the object which is linked to System.in.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
This will convert the byte data to character stream data.
Reading Characters
int read( ) throws IOException
- 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.
//example for reading characters from console
// Use a BufferedReader to read characters from the console.
import java.io.*;
public class ReadingCharacters
{
public static void main(String args[]) throws IOException
{
char c;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //to get data from console
System.out.println("Enter characters, 'q' to quit.");
c = (char) br.read(); //reads the data from the inputstream using read() method of BufferedReader.
// read characters
while(c != 'q') //it will stop when we enter q
{
System.out.println(c);
c = (char) br.read();
}
}
}
Output:
Enter characters, 'q' to quit.
abc12q
a
b
c
1
2
Reading Strings
String readLine( ) throws IOException
This method will return the String object which reads from console.
// Use a BufferedReader to read Strings from the console.
import java.io.*;
public class ReadingStrings
{
public static void main(String args[]) throws IOException
{
// create a BufferedReader using System.in
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str=null;;
System.out.println("Enter lines of text.");
System.out.println("Enter 'stop' to quit.");
do
{
str = br.readLine();
System.out.println(str);
} while(!str.equals("stop"));
}
}
Output:
Enter lines of text.
Enter 'stop' to quit.
hi
hello
world
12344
stop
Writing Console Output
- print() and println() are the methods used to output the data to console which are defined by PrintStream the object reference of System.out.
- PrintStream is an output stream derived from OutputStream, it also implements the low-level method write( ).
void write(int byteval)
- byteval is declared as an integer, only the low-order eight bits are written.
// Demonstrate System.out.write().
public class WriteDemo {
public static void main(String args[]) {
int b;
b = 'A';
System.out.write(b);
System.out.write('\n');
}
}
Output:
A
The PrintWriter Class
- PrintWriter is one of the character-based classes. Using a character-based class for console output makes internationalizing your program easier.
PrintWriter(OutputStream outputStream, boolean flushingOn)
outputStream is an object of type OutputStream.
flushingOn controls whether Java flushes the output stream every time a println( ) method (among others) is called.
If flushingOn is true, flushing automatically takes place. If false, flushing is not automatic.
// Demonstrate PrintWriter
import java.io.*;
public class PrintWriterDemo
{
public static void main(String args[])
{
PrintWriter pw = new PrintWriter(System.out, true);
pw.println("This is a string");
int i = -7;
pw.println(i);
double d = 4.5e-7;
pw.println(d);
}
}
Output:
This is a string
-7
4.5E-7