2.1 Java IO
2.1 Java IO
Files
Part I
1
Introduction
So far we have used variables and arrays for
storing data inside the programs. This approach
poses the following limitations:
The data is lost when variable goes out of scope or when
the program terminates. That is data is stored in
temporary/mail memory is released when program
terminates.
It is difficult to handle large volumes of data.
We can overcome this problem by storing data on
secondary storage devices such as floppy or hard
disks.
The data is stored in these devices using the
concept of Files and such data is often called
persistent data.
2
File Processing
Storing and manipulating data using files
is known as file processing.
Reading/Writing of data in a file can be
performed at the level of bytes,
characters, or fields depending on
application requirements.
Java also provides capabilities to read and
write class objects directly. The process of
reading and writing objects is called
object serialisation.
3
C Input/Output Revision
FILE* fp;
fp = fopen(“In.file”, “rw”);
fscanf(fp, ……);
frpintf(fp, …..);
fread(………, fp);
fwrite(……….., fp);
4
I/O and Data Movement
The flow of data into a
program (input) may come
from different devices such
as keyboard, mouse,
memory, disk, network, or
another program.
The flow of data out of a
program (output) may go to
the screen, printer, memory,
disk, network, another
program.
Both input and output share
a certain common property
such as unidirectional
movement of data – a
sequence of bytes and
characters and support to the
sequential access to the
data.
5
Streams
Java Uses the concept of
Streams to represent the
ordered sequence of data,
a common characteristic
shared by all I/O devices.
Streams presents a
uniform, easy to use,
object oriented interface
between the program and
I/O devices.
A stream in Java is a path
along which data flows
(like a river or pipe along
which water flows).
6
Stream Types
The concepts of
sending data from Input Stream
one stream to another reads
(like a pipe feeding Source Program
into another pipe) has
made streams
powerful tool for file Output Stream
processing.
Program Source
Connecting streams writes
can also act as filters.
Streams are classified
into two basic types:
Input Steam
Output Stream
7
Java Stream Classes
Input/Output related classes are
defined in java.io package.
Input/Output in Java is defined in terms
of streams.
A stream is a sequence of data, of no
particular length.
Java classes can be categorised into
two groups based on the data type one
which they operate:
Byte streams
Character Streams
8
Streams
9
Classification of Java Stream
Classes
10
Byte Input Streams
InputStream
ObjectInputStream
SequenceInputStream
ByteArrayInputStream
PipedInputStream
FilterInputStream
PushbackInputStream
DataInputStrea BufferedInputStre
m am
11
Byte Input Streams -
operations
public abstract int Reads a byte and returns
read() as a integer 0-255
public int read(byte[] Reads and stores the
buf, int offset, int count) bytes in buf starting at
offset. Count is the
maximum read.
public int read(byte[] Same as previous
buf) offset=0 and
length=buf.length()
public long skip(long Skips count bytes.
count)
public int available() Returns the number of
bytes that can be read. 12
Byte Input Stream - example
Count total number of bytes in the file
import java.io.*;
class CountBytes {
public static void main(String[] args)
throws FileNotFoundException, IOException
{
FileInputStream in;
in = new FileInputStream(“InFile.txt”);
int total = 0;
while (in.read() != -1)
total++;
System.out.println(total + “ bytes”);
}
}
13
What happens if the file did not
exist
JVM throws exception and terminates the program
since there is no exception handler defined.
14
Byte Output Streams
OutputStream
ObjectOutputStream
SequenceOutputStream
ByteArrayOutputStream
PipedOutputStream
FilterOutputStream
PrintStream
DataOutputStre BufferedOutputStrea
am m
15
Byte Output Streams -
operations
public abstract void Write b as bytes.
write(int b)
public void write(byte[] Write count bytes
buf, int offset, int count) starting from offset in
buf.
public void write(byte[] Same as previous
buf) offset=0 and count =
buf.length()
public void flush() Flushes the stream.
public void close() Closes stream
16
Byte Output Stream - example
Read from standard in and write to standard out
import java.io.*;
class ReadWrite {
public static void main(string[] args)
throws IOException
{
int b;
while (( b = System.in.read()) != -1)
{
System.out.write(b);
}
17
Summary
Streams provide uniform interface
for managing I/O operations in Java
irrespective of device types.
Java supports classes for handling
Input Steams and Output steams via
java.io package.
Exceptions supports handling of
errors and their propagation during
file operations.
18