14 file handling

16
OOSSE - Java Lecture A1 1 Aug 29, 2022 File Handling OOSSE - Programming with Java Lecture A1

description

 

Transcript of 14 file handling

Page 1: 14 file handling

OOSSE - Java Lecture A1 1Apr 10, 2023

File Handling

OOSSE - Programming with JavaLecture A1

Page 2: 14 file handling

OOSSE - Java Lecture A1 2Apr 10, 2023

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

Page 3: 14 file handling

OOSSE - Java Lecture A1 3Apr 10, 2023

Why use files?

• In all the programs we have written so far, any data we need has been either– hard coded into the programString name = "Cathy";– or read in from the keyboard using a Scanner objectScanner 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

Page 4: 14 file handling

OOSSE - Java Lecture A1 4Apr 10, 2023

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

Page 5: 14 file handling

OOSSE - Java Lecture A1 5Apr 10, 2023

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"));

Page 6: 14 file handling

OOSSE - Java Lecture A1 6Apr 10, 2023

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 keyboardString 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 keyboardScanner kybd = new Scanner(System.in);

Scanner inFile = new Scanner(new File(fName));

Page 7: 14 file handling

OOSSE - Java Lecture A1 7Apr 10, 2023

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 dataNick 4.95

Fred 5.94

Dave 9.45• The code overleaf would process all the data in turn

Page 8: 14 file handling

OOSSE - Java Lecture A1 8Apr 10, 2023

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();

Page 9: 14 file handling

OOSSE - Java Lecture A1 9Apr 10, 2023

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 fileinFile.close();

Page 10: 14 file handling

OOSSE - Java Lecture A1 10Apr 10, 2023

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

Page 11: 14 file handling

OOSSE - Java Lecture A1 11Apr 10, 2023

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 createdPrintWriter pw = new PrintWriter("Payroll.txt");

Page 12: 14 file handling

OOSSE - Java Lecture A1 12Apr 10, 2023

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 linepw.print(name);

pw.printf("%6.2f", hourlyPay);

pw.println();

• Close the PrintWriter when you have finished writing to the filepw.close();

Page 13: 14 file handling

OOSSE - Java Lecture A1 13Apr 10, 2023

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

Page 14: 14 file handling

OOSSE - Java Lecture A1 14Apr 10, 2023

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

Page 15: 14 file handling

OOSSE - Java Lecture A1 15Apr 10, 2023

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

Page 16: 14 file handling

OOSSE - Java Lecture A1 16Apr 10, 2023

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