14.file IO
14.file IO
Input stream
Output stream
Why should you study this chapter?
ASCII code
256 characters
(8 bits)
Character
Unicode 65536 characters
(16 bits) ( not completely represented)
Java :
Uses UTF to read/write Unicode
Helps converting Unicode to external 8-bit encodings and
vice versa.
2- Introduction to the java.io Package
Java treats all data sources ( file, directory, IO
devices,…) as streams
The java.io package contains Java APIs for accessing
to/from a stream.
A stream can be a binary stream.
Binary low-level stream: data unit is a physical byte.
Binary high-level stream: data unit is primitive data type
value or a string.
Object stream: data unit is an object.
A stream can be a character stream in which a data
unit is an Unicode character.
3- Accessing directories and files
The java.io.File Class
Class represents a file or a directory managed by operating system.
Constructor Summary
Java Program File(File parent, String child)
Creates a new File instance from a parent abstract pathname and
java.io.File class a child pathname string.
File(String pathname)
Creates a new File instance by converting the given pathname
string into an abstract pathname.
OS
File(String parent, String child)
Creates a new File instance from a parent pathname string and a
child pathname string.
File(URI uri)
Directories/
Creates a new File instance by converting the given file: URI
Files
into an abstract pathname.
Information
Accessing directories and files…
The java.io.File Class…
Character Streams:
Two ultimate abstract classes of character streams are Reader
and Writer.
Reader: input character stream will read data from data source
(device) to variables (UTF characters).
Writer: stream will write UTF characters to data source
(device).
Access Text Files …
Character Streams
Access Text Files …
Reading Data
File
2
read() char c;
1 -1?
FileReader
String S;
readLine()
TextFile split
(filename) null?
BufferedReader
char c; 2
1
String S; FileWriter class
TextFile
write()
(filename)
concatenate
print()
println()
ClassA obj;
PrintWriter class
Type field1 FileWriter(File file)
Binary streams.
Low-level streams: reading/writing data byte-by-
byte.
High-level stream: reading/writing general-format
data (primitives – group of bytes that store typed-
values)
Access binary files…
The java.io.RandomAccessFile class
WRITE
READ
Access binary files…
Binary Streams
Access binary files…
Low-Level Binary Stream Demo.1
Write
data to file
Read
data
from the Convert array of characters to string for
Read a byte: ‘5’
file then printing them easier.
print Read the blank
them
out.
Read the blank
Read a number
Write
data to file Now, we can see all
the file content
because they are
characters
Access binary files…
Low-Level Binary Stream Demo.2…
Read
data
from
the
file
Access binary files
High-Level Binary Stream
Serialization is a task which will concate all data of an object to a byte stream then it can
be written to a datasource. Static and transient data can not be serialized.
De-serialization is a task which will read a byte stream from a datasourse , split the
stream to fields then assign them to data fields of an object appropriately.
Transient fields are omitted when an object is serialized.
Serialization
class A implements
ObjectInputStream f; java.io.Serializable ObjectOutputStream
{ Type field1;
Type field2;
………… writeObject()
readObject()
}
null?
Java serielize
data of an
object from
the bottom of
the
declaration to
the beginning.
Access Object Files…:
Case Study 3- Implementations