Chapter 8
Chapter 8
Debasis Samanta
Department of Computer Science & Engineering
Indian Institute of Technology Kharagpur
Input-Output Streams in Java
Stream in Java
Keyboard Screen
Java treats flow of data as
Input stream
stream.
Mouse Printer
Java streams are classified into
two basic types, namely, input
Memory Java Program Memory
stream and output stream.
Output Stream
Program Source
• Reading bytes
• Closing streams
• Marking positions in streams
• Skipping ahead in streams
• Finding the number of bytes in stream
• and many more…
Some input stream methods
Method Description Example:
read( ) Read a byte from the input stream
DataInputStream
read(byte b[ ]) Read an array of bytes into b readShort( ) readDouble( )
readInt( ) readLine( )
read(byte b[ ], int n, int m) Reads m bytes into b starting from nth byte readLong( ) readChar( )
readFloat( ) readBoolean( )
available( ) Gives number of bytes available in the input
readUTF( )
OutputStream
FileOutputStream ObjectOutputStream
PipedOutputStream ByteArrayOutputStream
FilterOutputStream
BufferedOutputStream PushbackOutputStream
DataOutputStream
DataOutput
Some methods in output stream classes
Method Description Example:
write ( ) Write a byte from the input stream DataOutputStream
write (byte b[ ]) Write all bytes in the array b to the writeShort( ) writeDouble( )
writeLong( ) writeChar( )
write (byte b[ ], int n, int m) Write m bytes from array b starting
writeFloat( ) WriteBoolean( )
from nth byte
writeUTF( )
close( ) Close the output stream
Closing a stream
• void close()
Clearing a buffer
• void flush()
Character Stream Classes
Taxonomy: Java stream classes
Java Stream
Class
Reader
BuffereedReader StringReader
CharArrayReader PipeReader
InputStreamReader FilterReader
Writer
BuffereedWriter StringReader
CharArrayWriter PipeWriter
FilterWriter PrintWriter
OutputStreamWriter
FileWriter
List of Important tasks and their Classes
Task Character Stream Class Byte Stream Class
Performing input operations Reader InputStream
Buffering input BufferedReader BufferedlnputStream
Keeping track of line numbers LineNumberReader LineNumberlnputStream
Reading from an array CharArrayReader ByteArrayInputStream
Translating byte stream InputStreamReader (none)
into a character stream
Reading from files FileReader FileInputStream
Filtering the input FilterReader FilterlnputStream
Pushing back characters/bytes PushbackReader PushbackInputStream
Reading from a pipe PipedReader PipedInputStream
Reading from a string StringReader StringBufferInputStream
Reading primitive types (none) DataInputStream
Performing output operations Writer OutputStream
Buffering output BufferedWriter BufferedOutputStream
Writing to an array CharArrayWriter ByteArrayOutputStream
Filtering the output FilterWriter FilterOutputStream
Translating character stream OutputStreamWriter (none)
into a byte stream
Writing to a file FileWriter FileOutputStream
Printing values and objects PrintWriter PrintStream
Writing to a pipe PipedWriter PipedOutputStream
Writing to a string StringWriter (none)
Writing primitive types (none) DataOutputStream
OBJECT ORIENTED PROGRAMMING WITH JAVA
Input-Output Handling in Java – II
Debasis Samanta
Department of Computer Science & Engineering
Indian Institute of Technology Kharagpur
Usage of I-O Stream Classes
Get input using DataInputStream class
Calculator Program
import java.io.*; System.out.flush();
class InterestCalculator tempString = in.readLine();
{ rateOfInterest =
public static void main(String args[ ] ) Float.valueOf(tempString);
{ System.out.print("Enter Number of Years:");
Float principalAmount = new Float(0); System.out.flush();
Float rateOfInterest = new Float(0); tempString = in.readLine();
int numberOfYears = 0; numberOfYears =
Integer.parseInt(tempString);
DataInputStream in = new // Input is over: calculate the interest
DataInputStream(System.in); int interestTotal =
String tempString; principalAmount*rateOfInterest*numberOfYears;
System.out.print("Enter Principal System.out.println("Total Interest = " +
Amount: "); interestTotal);
System.out.flush(); }
tempString = in.readLine(); }
principalAmount =
Float.valueOf(tempString);
System.out.print("Enter Rate of
Interest: ");
Files Handling in Java
Java File I/O
Java provides java.io package which includes numerous class definitions
and methods to manipulate file and flow of data ( called File I/O streams )
There are
File
FileInputStream
four major FileOutputStream
classes: RandomAccessFile
Using class File
Opening a File object
• There are three constructors
• Way 1:
•File myFile;
•myFile = new File(fileName); // Constructor 1
• Way 2:
•File myFile;
•myFile = new File (pathName, filename); // Constructor 2
• Way 3:
•File myFile;
•File myFile = new File(myDir, fileName); // Constructor 3
Using class File
Dealing with file names
• String getName()
• String getPath()
• String getAbsolutePath()
• String getParent()
Directory utilities
• boolean mkDir(File newDir)
• boolean mkDirs(File newDir)
• String [] list()
Checking Status of a File
Using class File: An example
public static void getPaths (File f ) throws IOException {
import java.io.File
class FileTest {
public static void main (String args [ ] ) throws IOException {
import java.io.File
args.length;i++ ) {
getInfo(fileToCheck);
} f.getParent ( ) );
System.out.println ("Parent : " +
}
}
System.out.println ("System.err.println
Usage : Java file (" test
File <filename (s) >););
does not exist."
? "and is writable" : "");
System.out.println ( f.canWrite( )
}
f.length( ) + "bytes" );
}
} exist." );
else
System.err.println (" File does not
}
}
Reading a File
Example: class FileInputStream
{ System.out.println (" Remaining bytes :" + fin.available( ) );
{
class InputStreamTest
class InputStreamTest
public static void main (String args [ ] ) {
int size;
}
else {
}
string
System.out.println (temp) ;
} fin.skip(size/4);
System.out.println (" File remaining for read ::" +fin.available( ) );
}
}
fin.close ( ); // Close the input stream
}
}
Writing into a File
Example: Writing bytes into file
import java.io.*;
class WriteBytes {
public static void main(String args[]) {
cities[]={'D','E','L','H','I','\n','M','A','D','R','A','S','\n','L','O','N','D','O',
'N','\n'}; //Declare and initialize a byte array byte
FileOutputStream outfile=null; //create an output file stream
try {
outfile = new FileOutputStream("city.txt");
// Connect the outfile stream to "city.txt"
outfile.write(cities); //Write data to the stream
outfile.close();
}
catch(IOException ioe) {
System.out.println(ioe);
System.exit(-1);
}
}
}
Reading from a File
Example: Reading bytes from file
import java.io.*;
class ReadBytes {
public static void main (String args[]) {
FileInputStream infile = null; // Create an input file stream
int b;
try {
infile = new FileInputStream(args[O]);
// Connect infile stream to the required file
while((b = infile.read()) != -1) {
System.out.print((char)b); // Read and display data
}
infile.close();
}
catch(IOException ioe) {
System.out.println(ioe);
}
}
}
Copy a File into Other File
(CharacterStream Class)
Example: Reading/ writing characters
//Copying characters from one file into another while ((ch = ins.read()) != -1)
import java.io.*; {
class CopyCharacters outs.write(ch) ;
}
{
}
public static void main (String args[]) catch(IOException e) {
{ System.out.println(e);
//Declare and create input and output files System.exit(-1);
File inFile = new File("input.dat"); }
File outFile = new File("output.dat"); finally //Close files
{
FileReader ins = null; // Creates file stream ins
try {
FileWriter outs = null;
ins.close();
// Creates file stream outs outs.close();
try { }
ins = new FileReader (inFile) ; catch (IOException e) { }
// Opens inFile }
outs = new FileWriter (outFile) ; } // main
} // class
// Opens outFile
int ch; // Read and write till the end
Copying a File into Other File
(ByteStream Class)
Example: Copying bytes from one file to another
import java.io.*;
import java.io.*;
try {
class CopyBytes
class CopyBytes catch(FileNotFoundException e) {
//Connect infile to in.dat
{ infile = new System.out.println("File not
{
FilelnputStream("in.dat"); found");
public static
public static void
void main (String args[])
main (String args[]) }
//Connect outfile to out.dat
{
{ outfile = new catch(IOException e) {
FileOutputStream("out.dat"); System.out.println(e.
//Declare input
//Declare input and
and output
output file
file
//Reading bytes from in.dat getMessage());
streams
streams and writing to out.dat }
do { finally //Close files
FilelnputStream infile =
FilelnputStream infile null;
= null;
try { java.io.*;
{
import
catch(FileNotFoundException e) {
byteRead = (byte) infile.read()
//Input stream
//Input stream \\ try {
outfile.write(byteRea d);
FileOutputStream outfile = null;
FileOutputStream outfile = null; } infile.close(); infile.close();
class //Connect
CopyBytes infile to in.dat
//Output stream
stream 1);
//Output }
}
//Declare a
//Declare a variable
variable to
to hold
hold a
a catch(IOException e){}
found");
infile = new
byte }
byte
{
}
}
byte byteRead;
byte byteRead; }
FilelnputStream("in.dat");
catch(IOException {
public static void e) main (String args[])
//Connect outfile to out.dat
System.out.println(e.
{ outfile = new
getMessage());
//Declare input and output file streams
} FileOutputStream("out.dat");
finally
FilelnputStream //Close
infile = in.dat
files null;
//Reading bytes from
{
and
//Inputtrywriting
stream
{ to
\ out.dat
do {
FileOutputStream outfile = null;
infile.close();
byteRead = (byte)
outfile.close();
//Output stream infile.read()
}
outfile.write(byteRea d);
//Declare a variable to hold a byte
} catch(IOException e){}
} byteRead;
byte while(byteRead != - 1);
}
}}
Storing Data into a File
Example: Storing and reading data
import java.io.*;
class ReadWritePrimitive
dos.close();
{ fos.close();
public static void main (String args[]) throws IOException //Read data from the "prim.dat" file
{ FileInputStream fis = new FileInputStream(primitive);
File primitive = new File("prim.dat"); DataInputStream dis = new DataInputStream(fis);
FileOutputStream fos = new FileOutputStream(primitive); System.out.println(dis.ReadInt());
System.out.println(dis.ReadDouble());
DataOutputStream dos = new DataOutputStream(fos);
System.out.println(dis.ReadBoolean());
System.out.println(dis.ReadChar());
//Write primitive data to the "prim.dat"file
dos.WriteInt(1999); dis.close();
dos.WriteDouble(375.85); fis.close();
dos.WriteBoolean(false); }
dos.WriteChar('X'); }
Example: Storing and reading data in same file
importjava.io.*;
java.io.*; dos == new
dos new DataOutputStream(new
DataOutputStream(new FileOutputStream(intFile));
FileOutputStream(intFile)); try {
import
for(int i=0;i<20;i++)
for(int i=0;i<20;i++) dis = new DatalnputStream(new
classReadWriteIntegers
class ReadWriteIntegers ((int)
dos.writelnt ((int) (Math. random () *100));
random () *100)); }}
dos.writelnt (Math. FilelnputStream(intFile)); //Create input stream for intFile file
{{ catch(IOException ioe)
catch(IOException ioe) {{
System.out.println(ioe.getMessage());
System.out.println(ioe.getMessage()); for(int i=0;i<20;i++) {
publicstatic
public staticvoid
voidmain (String
main(String
int n = dis.readlnt();
args[])
args[]) }} System.out.print(n + " "); } }
finally
finally {{ catch(IOException ioe) {
{{ try {{
try System.out.println(ioe.
dis==null;
DatalnputStreamdis null;
import java.io.*;
DatalnputStream dos.close()
dos.close() getMessage());
}}
try {
//Inputstream
//Input stream }
catch(IOException ioe)
catch(IOException ioe) {{ }} finally {
dos==null;
DataOutputStreamdos
DataOutputStream null;
}}
class disReadWriteIntegers
try {
intFile==new
FileintFile new
DataOutputStream(new
//Outputstream
//Output stream
FileOutputStream(intFile));
= new DatalnputStream(new
//Reading integers
//Reading integers from
from rand.dat
rand.dat file
file
}
dis.close();
catch(IOException ioe)
{
File
for(int
{ }
File("rand.dat");
File("rand.dat");
//Writingintegers
integersto
torand.dat
rand.datfile
file i=0;i<20;i++)
FilelnputStream(intFile));
//Constructaafile
//Construct file
//Create input stream for intFile file }
}
main {(String
//Writing
try
try for(int
public static void((int)
i=0;i<20;i++)
dos.writelnt (Math. random () *100)); }
}
{{
int n = dis.readlnt();
catch(IOException
args[]) ioe) {
//Createoutput
//Create outputstream
streamfor
forintFile
intFilefile
file dos==new
dos new
Debasis Samanta
Department of Computer Science & Engineering
Indian Institute of Technology Kharagpur
Random Access Files in Java
Use of class RandomAccessFile
• As the name implies the class RandomAccessFile allows us to handle a
file randomly in contrast to sequentially in InputStream or
OutputStream classes
Object
DataInput DataOutput
RandomAccessFile
Example: RandomAccessFile
import java.io.*; System.out.println(file.readlnt());
class RandomIO System.out.println(file.readDouble());
{ file.seek(2); // Go to the second item
public static void main (String args[)) System.out.println(file.readlnt());
{ // Go to the end and append false to
RandomAccessFile file = null; the file
try { file.seek(file.length());
file = new file.writeBoolean(false);
file. seek (4) ;
RandomAccessFile("rand.dat","rw");
System.out.println(file.readBoolean());
// Writing to the file
file.close();
file.writeChar('X');
}
file.writelnt(555);
catch(IOException e)
file.writeDouble(3.1412); {
file.seek (0);
// Go to the beginning System.out.println(e);
// Reading from the file }
System.out.println(file.readChar()); }
}
Example: Appending to a RAF
import java.io.*;
class RandomAccess
{
static public void main(String args[])
{
RandomAccessFile rFile;
try
{
rFile = new RandomAccessFile("city.txt","rw");
dos.writeInt(items);
static StringTokenizer st;
public static void main (String args[J) throws
FileInputStream("invent.dat"));
st = new StringTokenizer(din.readLine());
{
double cost = new
System.out.println(); dos.close();
st = new StringTokenizer(din.readLine());
System.out.println("Item Cost : " + itemCost);
int codeNumber = dis.readInt();
int totalItems = dis.readInt();
double itemCost = dis.readDouble();
st = new StringTokenizer(din.readLine());
System.out.println("Item Cost : " + itemCost);
}
System.out.println("Total Items : " + totalItems);
System.out.println("Total Cost : " + totalCost);