File Handling

You might also like

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 15

File Handling in Java

1
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

13 Nov 2022 2
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

13 Nov 2022 3
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"));

13 Nov 2022 4
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));

13 Nov 2022 5
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
13 Nov 2022 6
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();

13 Nov 2022 7
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();

13 Nov 2022 8
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

13 Nov 2022 9
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");

13 Nov 2022 10
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();

13 Nov 2022 11
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

13 Nov 2022 12
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

13 Nov 2022 13
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

13 Nov 2022 14
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

13 Nov 2022 15

You might also like