Title: Working with files
1Working with files
By the end of this lecture you should be able to
- explain the principles of input and output and
identify a number of different input and output
devices - explain the concept of an I/O stream
- describe the basic file-handling techniques used
in the Java language - distinguish between text, binary and object
encoding of data - distinguish between serial access files and
random access files - create and access files in Java using all the
above encoding and access methods.
2Input and output
file input stream
Input receiving information from the outside
world
Output sending information back to the outside
world.
file output stream
3Encoding
Java supports three different ways of encoding
data
Can be read by text editors as well as programs.
Java Charatan Kans 34.99
TEXT
Can only programs.
0010110110100 0001000100100 1101001001000
BINARY
Can only read by another Java program.
1010111011010 1101000100101 1101001 00101
OBJECT
4Types of File Access
Serial access Each item of data is read (or
written) in turn.
Random access We go directly to the record we
want .
5The Car Class
public class Car private String
registration private String make
private double price public Car (String
registrationIn, String makeIn, double priceIn)
registration registrationIn
make makeIn price priceIn
public String getRegistration()
return registration public String
getMake() return make
public double getPrice() return
price
6Writing to text files
XV1 2AS Ford 2499
FileWriter
PrintWriter
Cars.txt
7Writing to text files
private static void writeList (ListltCargt
carListIn) try FileWriter
carFile new FileWriter ("Cars.txt") PrintWrite
r carWriter new PrintWriter (carFile)
for (Car item carListIn)
carWriter.println (
item.getRegistration() )
carWriter.println ( item.getMake() )
carWriter.println ( item.getPrice() )
carWriter.close()
catch (IOException e)
System.out.println("There was a problem writing
the file")
8Effects of writing to a text file
9Reading from text files
XV1 2AS Ford 2499
FileReader
BufferedReader
Cars.txt
10 private static void readList (ListltCargt
carListIn) String tempReg String
tempMake String tempStringPrice double
tempDoublePrice try FileReader carFile
new FileReader ("Cars.txt") BufferedReader
carStream new BufferedReader (carFile)
tempReg carStream.readLine() while (tempReg
! null) // code
to read data goes here
carStream.close() // code to catch
exceptions goes here
11Code to read data
tempMake carStream.readLine() tempStringPrice
carStream.readLine() tempDoublePrice
Double.parseDouble(tempStringPrice)
carListIn.add (new
Car(tempReg,tempMake,tempDoublePrice)) tempReg
carStream.readLine()
12Code to catch exceptions
catch(FileNotFoundException e)
System.out.println("\nNo file was
read") catch(IOException e)
System.out.println ("\nThere was a problem
reading the file")
13Writing to binary files
0010010011001 1110101001001 0001001001111
FileOutputStream
DataOutputStream
Cars.bin
14private static void writeList (ListltCargt
carListIn) Car tempCar try
FileOutputStream carFile new FileOutputStream("C
ars.bin") DataOutputStream carWriter
new DataOutputStream(carFile) for (Car
item carListIn)
carWriter.writeUTF(item.getRegistration())
carWriter.writeUTF(item.getMake())
carWriter.writeDouble(item.getPrice())
carWriter.close()
catch(IOException e)
System.out.println("There was a problem writing
the file")
15The effects of writing to a binary file
16Reading from binary files
0010010011001 1110101001001 0001001001111
FileInputStream
DataInputStream
Cars.bin
17Reading from a binary file
private static void readList (ListltCargt
carListIn) String tempReg String
tempMake double tempPrice boolean
endOfFile false try
FileInputStream carFile new FileInputStream
("Cars.bin") DataInputStream carStream
new DataInputStream (carFile)
while(endOfFile false) // code to
read data here carStream.close()
// code to catch FileNotFoundException and
IOException here
18Code to read data
try tempReg carStream.readUTF()
tempMake carStream.readUTF() tempPrice
carStream.readDouble() carListIn.add(new
Car(tempReg, tempMake, tempPrice))
catch(EOFException e) endOfFile true
19Object serialization
Enables us to read and write whole objects from
and to files The process of converting an object
into a stream of data suitable for storage on a
disk is called serialization Any class whose
objects are to be read and written using the
above methods must implement the interface
Serializable
import java.io. public class Car implements
Serializable // rest of code here
20Writing to object files
0010010011001 1110101001001 0001001001111
ObjectOutputStream
FileOutputStream
Cars.obf
21Writing objects to a file
private static void writeList(ListltCargt
carListIn) try
FileOutputStream carFile new FileOutputStream("C
ars.obf") ObjectOutputStream carStream
new ObjectOutputStream(carFile) for
(Car item carListIn)
carStream.writeObject(item)
carStream.close()
catch(IOException e)
System.out.println("There was a problem writing
the file")
22Reading from object files
0010010011001 1110101001001 0001001001111
FileInputStream
ObjectInputStream
Cars.obf
23Reading objects from a file
private static void readList(ListltCargt
carListIn) boolean endOfFile
false Car tempCar try
FileInputStream carFile new
FileInputStream("Cars.obf")
ObjectInputStream carStream new
ObjectInputStream(carFile) tempCar (Car)
carStream.readObject() while(endOfFile !
true) // code to
read data here carStream.close()
// code to catch
exceptions here
24Code to read data
try carListIn.add(tempCar) tempCar (Car)
carStream.readObject() catch(EOFException
e) endOfFile true
25catch(FileNotFoundException e)
System.out.println("\nNo file was
read") catch(ClassNotFoundException e) //
thrown by readObject
System.out.println
("\nTrying to read an object of an unknown
class") catch(StreamCorruptedException e) //
thrown by the constructor
System.out.println("\nUnreadable file
format") catch(IOException e)
System.out.println("There was a problem reading
the file")