Download - Working with files
Working 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.
Input and output
Output: sending information back to the outside world.
Input: receiving information from the outside world
standard input stream
standard output stream
file input stream
file output stream
Encoding
Java supports three different ways of encoding data:
“Java”“Charatan Kans”“34.99”
TEXTCan be read by text editors as well as programs.
BINARY001011011010000010001001001101001001000
Can only programs.
OBJECT101011101101011010001001011101001 00101
Can only read by another Java program.
Types 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 .
The Car Classpublic 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; }}
Writing to text files
“XV1 2AS”“Ford”“2499”
Cars.txt
FileWriterPrintWriter
Writing to text files
private static void writeList (List<Car> carListIn){ try {
FileWriter carFile = new FileWriter ("Cars.txt");PrintWriter 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"); }}
Effects of writing to a text file
Reading from text files
“XV1 2AS”“Ford”“2499”
Cars.txt
FileReaderBufferedReader
private static void readList (List<Car> 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}
tempMake = carStream.readLine();
tempStringPrice = carStream.readLine();
tempDoublePrice =
Double.parseDouble(tempStringPrice);
carListIn.add
(new Car(tempReg,tempMake,tempDoublePrice));
tempReg = carStream.readLine();
Code to read data
catch(FileNotFoundException e)
{
System.out.println("\nNo file was read");
}
catch(IOException e)
{
System.out.println
("\nThere was a problem reading the file");
}
Code to catch exceptions
Writing to binary files
001001001100111101010010010001001001111
Cars.bin
FileOutputStreamDataOutputStream
private static void writeList (List<Car> carListIn){ Car tempCar; try { FileOutputStream carFile = new FileOutputStream("Cars.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"); } }
The effects of writing to a binary file
Reading from binary files
001001001100111101010010010001001001111
Cars.bin
FileInputStreamDataInputStream
Reading from a binary file
private static void readList (List<Car> 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}
Code 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;
}
Object 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
}
Writing to object files
001001001100111101010010010001001001111
Cars.obf
FileOutputStreamObjectOutputStream
Writing objects to a file
private static void writeList(List<Car> carListIn){ try { FileOutputStream carFile = new FileOutputStream("Cars.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"); }}
Reading from object files
001001001100111101010010010001001001111
Cars.obf
FileInputStreamObjectInputStream
Reading objects from a file
private static void readList(List<Car> 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 }
try{
carListIn.add(tempCar);tempCar = (Car) carStream.readObject();
}catch(EOFException e){ endOfFile = true;}
Code to read data
catch(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");}