Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
File Handling in Java
May 17
1
Objectives
In this lecture, we will:
– learn how to read data from a file
– learn how to write data to a file
– discuss the structure of a program which uses files
May 17
2
Why use files?
• In all the programs we have written so far, any data we
need has been either
– hard coded into the program
String name = "Cathy";
– or read in from the keyboard using a Scanner object
Scanner kybd = new Scanner(System.in);
System.out.println("What is your name?");
name = kybd.next();
• It is tedious to type in all the data to be processed each
time the program is run
• It is not very useful if the data and results cannot be saved
– imagine a payroll program where all information about the
employees has to be entered each time the program is run
May 17
3
Opening a file to read from
• A Scanner object can be set up to read from a file
– so far all our Scanner objects have read from the keyboard
• The name of the file to read from is required
• First create a File object corresponding to this file
– need to import java.io.*
– this is a library of java classes for input and output
• Then create a Scanner object using the File object as the
source of the input
– instead of System.in
• If the input file is in the same directory as the Java program it
makes life easier
– if the file is not found, there will be an error (exception) when the
program runs
May 17
4
Reading from a file
import java.util.*;
import java.io.*;
public class Payroll
{
public static void main(String args[])
{
String fName = "payroll.txt";
Scanner inFile = new Scanner(new File(fName));
……
or
Scanner inFile =
new Scanner(new File("payroll.txt"));
May 17
5
Reading from Scanner objects
• Once the Scanner object is created, we can use its
methods to read from the file
– just like when reading from the keyboard
String name = inFile.next();
double hourlyPay = inFile.nextDouble();
• Multiple Scanner objects can be created, as long as they
are given different names
– for example, to read from two different files
– or from a file and the keyboard
Scanner kybd = new Scanner(System.in);
Scanner inFile = new Scanner(new File(fName));
May 17
6
Reading from a file
• The hasNext() method is useful when you do not know how
much data is in the file
– returns true if there is more data to read
– returns false if you have reached the end of the file
• It can be used in a while loop to process all the data in the file
• Imagine a text file is available where each line contains
information about one employee:
– name (as a String)
– followed by hourly pay (as a double)
• For example the file could contain the data
Nick
4.95
Fred
5.94
Dave
9.45
• The code overleaf would process all the data in turn
May 17
7
Reading all the data in a file
while (inFile.hasNext())
{
name = inFile.next();
hourlyPay = inFile.nextDouble();
System.out.println("Hours worked by "+name+"?");
hoursWorked = kybd.nextInt();
double pay = hourlyPay * hoursWorked;
System.out.println("Pay is " + pay);
}
inFile.close();
May 17
8
Closing a file
• When you have finished reading from a file, you should
close it
• A file is closed by calling the close() method of the
Scanner object that was set up to read the file
inFile.close();
May 17
9
Tips for Input Files
• Decide on the format of the data
– repeating rows of
• name (as a String)
• followed by hourly pay (as a double)
• Make sure the information is
– in the correct order
– of the correct type
• to match the input statements in your program
• Any text editor can be used to create and edit the file
• or it could be output from a program
– which writes to the file using the correct format
May 17
10
Writing to a file
• The name of the file to write to is required
• First create a PrintWriter object for this file
– need to import java.io.*
– same library of java classes as FileReader
• Typically the output file will be in the same directory as the
Java program
• If a file of this name already exists
– it will be opened
– all the data currently in the file will be lost
• If the file does not already exist, a new one will be created
PrintWriter pw = new PrintWriter("Payroll.txt");
May 17
11
Writing to a file
• Once the PrintWriter object is created, we can use its
methods to write to the file
– can use print(), println(), printf()
– just like when writing to the console output window
• For example to print an employee’s data on one line
pw.print(name);
pw.printf("%6.2f", hourlyPay);
pw.println();
• Close the PrintWriter when you have finished writing to
the file
pw.close();
May 17
12
Structure of a program that uses files
• A program which reads data from a file may do a lot of
processing on it
–
–
–
–
–
do calculations (totals, averages)
add to it (input by user)
delete some of it
sort it
search all of it for a particular data value
• It is awkward to search for and retrieve only the required
data from a sequential file for each process
• and to write changes back to the original file
May 17
13
Structure of a program that uses files
• It is sometimes better to
– open the input file
– read all the data in the file into an appropriate data structure
• such as an array, or several arrays
– close the input file
• Do all the processing in memory, then write the final
version of the data to a file
– either with the same name as the input file
• original data is lost
– or a new file
• Most of the program (data structures, processing) is the
same as when all the data is entered via the keyboard
– just add the file-reading code at the beginning of the program
– and the file-writing code at the end
May 17
14
Files and Exceptions
• File handling is one area that is prone to things going
wrong
– A file may not exist
– A file may not be accessible
– The format of the data in the file may be incorrect
• Whenever dealing with files it is best to make use of try
catch blocks to handle any exceptions
– Try to anticipate what could go wrong
May 17
15
Summary
In this lecture we have:
• learned how to read data from a file
• learned how to write data to a file
• discussed the structure of a program which uses files
May 17
16