Intro to the AS/400 - Florida State College at Jacksonville

Download Report

Transcript Intro to the AS/400 - Florida State College at Jacksonville

Intro to Programming
& Algorithm Design
Data Files
Assg
This presentation can be viewed on line in a file named:
Copyright 2003 by Janson Industries ch09.IntrotoProg.Files.ppt
1
Objectives

Explain
 Advantages
 How

of files
to process files
Show how to use files in Java
2
Copyright 2014 by Janson Industries
File

Everything on a computer is
stored in files
 Images
 Documents
 Web
pages
 Spreadsheet
 SFC
and Raptor flowcharts
 Java
source code
 Java
bytecode
3
Copyright 2014 by Janson Industries
Data File

We are talking about data files
 Inventory
data
 Customer
data
 Sales

data
Kind of like an array but more
permanent
 When
pgm stops data still exists
4
Copyright 2014 by Janson Industries
File Advantages

Instead of entering data every
time a pgm is run, user can enter
once and pgm can save to a file
 Data
can then be accessed at a
later time

This is how apps remember info
 Browser
favorities
 Amazon
purchase history
 Video
game high scores
5
Copyright 2014 by Janson Industries
Data Files

Are stored on secondary storage
 Hard

drive
 Flash
drive
 Cloud
drive
A program can put data into a file
(write to the file) or retrieve a
copy of the data from the file
(read the file)
6
Copyright 2014 by Janson Industries
Files

Programs read files just like
they read data from the
command line
 Can
read the entire line
 Can
read one word
 i.e.

All the text up to the next space
Programs write to files just like
they write to the console
 With
a carriage return
 Without
carriage return
7
Copyright 2014 by Janson Industries
Files

When writing, some languages
will overwrite any existing data
in a file
 Others


let you append data
Before a file can be written to
or read from, it must be
opened
Any data written to a file will
be saved when the file is
closed by the progam
8
Copyright 2014 by Janson Industries
Files



In pseudocode you must declare
a program file name
At the same time the file must
also be defined as input or
output
Lastly, the program file name
has to be associated with the
file's physical name
9
Copyright 2014 by Janson Industries
Files


Windows file's physical names
have a prefix and a suffix
Prefix can have many parts
(separated by periods) but the
suffix indicates the type of info in
the file
 Dear.John.docx
 My.First.Pgm.java
 My.Latest.Greatest.Selfie.jpeg
10
Copyright 2014 by Janson Industries
Writing to Files

The program file name and the
file's physical name are
associated in the open
statement
Declare OutPutFile customerFile
Open customerFile "Customer.dat"
Write customerFile "Joe Customer"
Write customerFile "1 Main St."
Write customerFile "Enid, OK 34343"
Close customerFile
11
Copyright 2014 by Janson Industries
Reading Files

Declare the input program file name

Associate it with the physical file name

Read the file
Results in the 3
variables holding
the file data
Copyright 2014 by Janson Industries
Declare String custName, custStreet,
custCSZ
Declare InputFile customerFile
Open customerFile "Customer.dat"
Read customerFile custName
Read customerFile custStreet
Read customerFile custCSZ
Close customerFile
12
Appending to Files


In the declare, identify the
mode as AppendMode
So, running the following
Declare OutputFile AppendMode customerFile
Open customerFile "Customer.dat"
Write customerFile "Mary Buyer"
Write customerFile "2 Oak St
Write customerFile "Muncie, IN 54545"
Close customerFile

Copyright 2014 by Janson Industries
Results in
13
Using Loops to Process Files


Like arrays, loops very useful for
accessing data in files
Unlike arrays, files can have
variable amounts of data
 No

Copyright 2014 by Janson Industries
length variable for files
Most file systems have a way to
determine if the end of the file
has been reached
14
Using Loops to Process Files



Copyright 2014 by Janson Industries
In pseudocode, use the eof (end
of file) function
eof(customerFile) will return a
true if the last record/line has
been read
Can use eof in a while loop to
process all the data in a file
15
Using Loops to Process Files

Copyright 2014 by Janson Industries
Assuming Customer.dat has the
following info
16
Using Loops to Process Files

To display a mailing list like this:
Joe Customer
1 Main St.
Enid, OK
34343
Mary Buyer
2 Oak St.
Muncie, IN 54545
Terry Smith
3 Pine Ave.
Palatka, FL 32273
Pat Jones
4 Lake Dr.
Erie, PA
23232
Copyright 2014 by Janson Industries
17
Using Loops to Process Files
Module main()
Declare Integer ctr
Declare String tempVariable
Declare InputFile customerFile
Open customerFile "Customer.dat"
While NOT eof(customerFile)
For ctr = 1 to 3
Read customerFile tempVariable
Display tempVariable
End For
Display " "
End While
Close customerFile
End Module
18
Copyright 2014 by Janson Industries
Using Loops to Process Files
Declare variables
and open the file
19
Copyright 2014 by Janson Industries
Using Loops to
Process Files
20
Copyright 2014 by Janson Industries
Files in Raptor

To read, still use the Input
function but must first identify
the file as the source of the input
 I.e.

not the keyboard/console
Done by calling the
Redirect_Input function
 Redirect_Input("E:/Customer.dat")

Copyright 2014 by Janson Industries
To write to a file use the
Redirect_Output function
21
Using File Loops in Raptor


Raptor has an End_Of_Input
function that is used to
control a loop
To close a file, set the
redirect to false
 Redirect_Input(false)
Copyright 2014 by Janson Industries
22
Using File Loops
in Raptor
EOF loop to read
all records
Loop to read the three
records for each customer
Copyright 2014 by Janson Industries
23
Using File
Loops in Raptor
Reads and
displays a record
Blank line separating
each customers data
Close the file
Copyright 2014 by Janson Industries
24
Using File Loops in Raptor
Results
Copyright 2014 by Janson Industries
25
Files in Java

To read, still use a Scanner and
its next(), nextLine, nextDouble,
etc. methods
 Need

to tie the scanner to the file
Done when creating the
Scanner
Scanner customerFile = new Scanner(new File("E:/Customer.dat"));

Copyright 2014 by Janson Industries
Need to import java.io.File;
26
Files in Java


If the file doesn't exist, creating
the scanner will cause a File Not
Found Exception
Two ways to handle
 Put
the following code in the
header of the method
public static void main(String[] args) throws IOException {
 And
Copyright 2014 by Janson Industries
import java.io.IOException;
27
Files in Java

Or you can enclose the statement
as follows
try {
customerFile = new Scanner(new File("E:/Customer.dat"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}

Copyright 2014 by Janson Industries
And import
java.io.FileNotFoundException;
28
Using File Loops in Java

The Scanner has a method
called hasNext
 Will

return true if there is more data
To close a file, use the Scanner's
close method
customerFile.close();
Copyright 2014 by Janson Industries
29
import
import
import
public
java.io.File;
java.io.IOException;
java.util.Scanner;
class FileLoop {
Using File Loops in Java
public static void main(String[] args) throws IOException {
//Declare variables
int ctr;
String tempVariable = new String();
//Declare objects and variables needed to read the file
Scanner customerFile = new Scanner(new
File("E:/Customer.dat"));
while(customerFile.hasNext()) {
for(ctr = 1; ctr <4; ctr++) {
//Reads and displays one record from the file
tempVariable = customerFile.nextLine();
System.out.println(tempVariable);
}
//Blank line for readablity
System.out.println("");
}
//Close the file
customerFile.close();
}
} 2014 by Janson Industries
Copyright
30
Using File Loops in Java
Copyright 2014 by Janson Industries
31
Modifying Files

Text files not always easy to add
to or modify
 That's


Copyright 2014 by Janson Industries
why there are Databases
Some languages allow you to
append to the file but some don't
But no language has an easy
way to modify
32
Modifying Files

To add when language doesn't
allow adding, have to:
 Read
all the records from the file
 Write
them to a temp file
 Get
the new data and write it to the
temp file
 Then
read all the records from the
temp file
 Write
 I.e.
Copyright 2014 by Janson Industries
them to the original file
write over what was in the original file
33
Modifying Files - Adding
Customer.dat
Old
Data
New
User Data
Old and
New Data
Copyright 2014 by Janson Industries
AddPgm
Old
Data
TempFile.dat
New
Data
AddPgm
AddPgm
Old and
New Data
34
Adding a Record

Fortunately, Java allows appending
so we won't have to mess with the
temporary file when adding
 But


Raptor doesn't!!
Also, we should check the file and
make sure that a record doesn't
already exist for the "new" data
Have to search the entire file before
adding a record
Copyright 2014 by Janson Industries
35
Modifying a Record


User specifies record to modify
Read and write all the records
from original file to temp until the
record to modify is read

Prompt the user with the old data

Get new data and write it to temp


Copyright 2014 by Janson Industries
Read rest of original records and
write them to temp
Copy temp back to original
36
Modifying a Record
User
Data To
Modify
AddPgm
Data AddPgm Data
TempFile.dat
Records
Records
Up to the
Up to the
one to modify
one to modify
Customer.dat
Old Data
AddPgm
User
New Data
Copyright 2014 by Janson Industries
New Data
37
Modifying a Record
Rest of
Rest
of
Customer.dat
AddPgm
TempFile.dat
Data
Data
Customer.dat
All
Data
AddPgm
All
Data
TempFile.dat
38
Copyright 2014 by Janson Industries
Modifying Files


Will design a program to allow
users to add, modify or display a
customer's information
If user wants to add a customer,
will check that info for that
customer does not already exist

Copyright 2014 by Janson Industries
If info does exist, will not allow user
to add
39
Module main()
Declare String option = ""
While option NOT equal 4
Display "What would you like to do? Enter:"
Display "1 to add a customer"
Display "2 to modify a customer"
Display "3 to display a customer"
Display "4 to end the pgm"
Input option
If option = "1" Then
addRecord()
Else
If option = "2" Then
modifyRecord()
Else
If option = "3" Then
displayRecord()
End If
End If
End If
End While
End Module
Modifying Files
Copyright 2014 by Janson Industries
40
Module addRecord()
Declare String custToAdd
Declare String custNameInFile
Declare String tempVariable
Declare Boolean recordExists = false
Modifying Files
custToAdd = getCustomerName()
Declare InputFile customerFile
Open customerFile "Customer.dat"
While NOT eof(customerFile) AND recordExists = false
Read customerFile custNameInFile
If custNameInFile = custToAdd Then
recordExists = true
Else For ctr = 1 to 2
Read customerFile tempVariable
End For
End If
End While
Close customerFile
Copyright 2014 by Janson Industries
41
Modifying Files
If recordExists = true Then
Display "Sorry there is already a record for customer " +
custToAdd
Else
Declare OutputFile AppendMode customerFileOut
Open customerFileOut "Customer.dat"
Write customerFileOut custToAdd
Display "What is the customers street address"
Input tempVariable
Write customerFileOut tempVariable
Display "What is the customers city, state and zip"
Input tempVariable
Write customerFileOut tempVariable
Display "Customer " + custToAdd + " added"
Close customerFileOut
End If
End Module
Copyright 2014 by Janson Industries
42
Module modifyRecord()
Declare String custToMod
Declare String custNameInFile
Declare String tempVariable
Declare Boolean recordExists = false
custToMod = getCustomerName()
Declare OutputFile tempFile
Open tempFile "TempFile.dat"
Declare InputFile customerFile
Open customerFile "Customer.dat"
While NOT eof(customerFile) AND recordExists = false
Read customerFile custNameInFile
Write tempFile custNameInFile
Read till record to If custNameInFile = custToMod Then
change found
recordExists = true
Else For ctr = 1 to 2
Read customerFile tempVariable
Write tempFile tempVariable
End For
End If
43
End While
Modifying Files
Copyright 2014 by Janson Industries
Modifying Files
If record
not found
If recordExists = false Then
Display "Sorry there is no record for customer " + custToMod
Close customerFile
Else
Read customerFile tempVariable
Display "This is the customers current street address "
Display tempVariable
Display "What is the customers new street address"
Input tempVariable
If record found get new
info and write it to
Write tempFile tempVariable
temFile
Read customerFile tempVariable
Display "This is the customers current city, state and zip"
Display tempVariable
Display "What is the customers new city, state and zip"
Input tempVariable
Write tempFile tempVariable
Display "Customer " + custToMod + " changed"
44
End If
Copyright 2014 by Janson Industries
Modifying Files
While NOT eof(customerFile)
Read customerFile tempVariable
Write rest of customer
records to tempFile
Write tempFile tempVariable
End While
Close customerFile
Close tempFile
Declare InputFile tempFileIn
Open tempFileIn "TempFile.dat"
Declare OutputFile customerFileOut
Open customerFileOut "Customer.dat"
While NOT eof(tempFileIn)
Read tempFileIn tempVariable
Write customerFileOut tempVariable
End While
Write all records to
Close customerFileOut
Customer from tempFile
Close tempFileIn
End Module
Copyright 2014 by Janson Industries
45
Module displayRecord()
Declare String custToDisp
Declare String custNameInFile
Declare String tempVariable
Declare Boolean recordExists = false
custToDisp = getCustomerName()
Declare InputFile customerFile
Open customerFile "Customer.dat"
While NOT eof(customerFile) AND recordExists = false
Read customerFile custNameInFile
Read till record to If custNameInFile = custToDisp Then
display found
recordExists = true
Display custNameInFile
When found display
For ctr = 1 to 2
the 3 records
Read customerFile tempVariable
Display tempVariable
End For
Display " "
End If
End While
Displaying Files
Copyright 2014 by Janson Industries
46
Modifying Files
If recordExists = false Then
Display "Sorry there is no customer " + custToDisp
End If
Close customerFile
End Module
Function String getCustomerName()
String custName
Display "What is the customers name"
Input custName
Return custName
End Function
Copyright 2014 by Janson Industries
47
main method
Modifying
Files SFC
Display the options
Input the option
Copyright 2014 by Janson Industries
48
Modifying Files SFC
Call method
based on option
Copyright 2014 by Janson Industries
49
Modifying Files SFC
addRecord
method
Loop checking if
customer already exists
Copyright 2014 by Janson Industries
50
Modifying Files SFC
addRecord
method
Checking customer name
No match: read the next
two records so positioned
at next name
Copyright 2014 by Janson Industries
51
addRecord
method
Match:
display msg
no add done
Copyright 2014 by Janson Industries
Modifying Files SFC
No match: prompt user
to supply data, read,
write to customer file
52
addRecord
method
Modifying Files SFC
Close the file
Copyright 2014 by Janson Industries
53
modifyRecord
method
Modifying Files SFC
Set up files
Copyright 2014 by Janson Industries
54
modifyRecord
method
Modifying Files SFC
Loop searching for
customer name
No match: read the next
two records so positioned
at next name
Copyright 2014 by Janson Industries
55
modifyRecord
method
No match
no change
Copyright 2014 by Janson Industries
Modifying Files SFC
Match: read cust data and
prompt user for new data
56
modifyRecord
method
Modifying Files SFC
Write new
data to temp
Finish writing rest of
cust data to temp
Copyright 2014 by Janson Industries
57
modifyRecord
method
Modifying Files SFC
Close files
Re-open so temp input
and customer is output
Copyright 2014 by Janson Industries
58
modifyRecord
method
Modifying Files SFC
Copy all temp records to customer
Copyright 2014 by Janson Industries
59
displayRecord
method
Modifying Files SFC
Set up
variables, get
name, open file
Start loop to
search file
Copyright 2014 by Janson Industries
60
displayRecord
method
Modifying Files SFC
If customer found, display
3 records and a blank line
Copyright 2014 by Janson Industries
61
displayRecord
method
Modifying Files SFC
Msg if
customer
not found
getCustomerName
method
Copyright 2014 by Janson Industries
62
Modifying Files Raptor


Because of Raptor's problem with
accepting numeric characters as
strings, will make option an Integer
Can't append, so will have to work
with temp file to do an Add


Copyright 2014 by Janson Industries
This means opening the TempFile
when we open Customer
As we search to see if customer
already exists, write each record to
temp
63
main method
Modifying
Files
Raptor
Display options
and input option
Call correct
function
Copyright 2014 by Janson Industries
64
addRecord
method
Modifying
Files
Raptor
Loop checking if
customer already exists
Copyright 2014 by Janson Industries
65
addRecord
method
Modifying
Files
Raptor
Checking customer name
No match: write
name and next
two records to
the temp file
Close customer file
Copyright 2014 by Janson Industries
66
addRecord
method
Match:
display msg
no add done
Modifying
Files
Raptor
No match: write
name to temp
prompt user to
supply data, read,
write to temp file
Close temp, then
open temp as input
and customer as
output
Copyright 2014 by Janson Industries
67
addRecord
method
Modifying
Files
Raptor
Write all records
from temp to
customer
Close files and
display user msg
Copyright 2014 by Janson Industries
68
Modifying Files Raptor

In Raptor, when you are writing to
a file, can't display info in console


So in modifyRecord:



Copyright 2014 by Janson Industries
You could but this means the
redirect must be set to false and the
next write will overwrite the file
Won't prompt with current data
Must get all the new data before
redirecting
Will need two more variables to hold
the data
69
Modifying Files Raptor

Alternatively, we could:




Copyright 2014 by Janson Industries
Read the entire file looking for
record
Retrieve the data
Then read the entire file again and
write to the temp file, etc.
Would mean a extra read of the
entire file…
70
modifyRecord
method
Modifying Files SFC
Get new info
Set up files
Copyright 2014 by Janson Industries
Loop to find
record to be
changed
71
modifyRecord
method
Check if record found
Modifying
Files
Raptor
No match: write
cust name and
next two records
to temp
Copyright 2014 by Janson Industries
72
Modifying
Files Raptor
Match: write new
customer data
No match:
no change
Match: skip rest of
old customer data
Match: write rest of data
from customer to temp
Copyright 2014 by Janson Industries
73
Close files
Re-open so temp is
input and
customer is output
modifyRecord
method
Modifying
Files Raptor
Write all data from
temp to customer
Copyright 2014 by Janson Industries
74
modifyRecord
method
Modifying Files Raptor
Close files
Display user
msg
Copyright 2014 by Janson Industries
75
displayRecord
method
Modifying
Files Raptor
Loop to search
for record to
display
Copyright 2014 by Janson Industries
76
If record found
display the
name…
Modifying
Files
Raptor
displayRecord
method
…get and
display next 2
records with
rest of data
Copyright 2014 by Janson Industries
77
displayRecord
method
Modifying Files Raptor
Display blank line
If record was
not found
display user msg
Close file
Copyright 2014 by Janson Industries
78
Modifying Files Raptor
getCustomerName
method
Copyright 2014 by Janson Industries
79
Modifying Files - Raptor

Given this data
Copyright 2014 by Janson Industries
80
Modifying Files Raptor

Copyright 2014 by Janson Industries
Running the flowchart results in:
81
Modifying Files Raptor

Copyright 2014 by Janson Industries
Specifying new customer info:
82
Modifying Files Raptor

Changing customer info:
Copyright 2014 by Janson Industries
83
Modifying Files Raptor
Copyright 2014 by Janson Industries
84
Modifying Files Raptor

And this is the data at the end
Copyright 2014 by Janson Industries
85
Modifying Files Java

To write to a file you use a
PrintWriter

Specify the file name and location
when creating the PrintWriter object

Like you did with the Scanner
PrintWriter tempFile = null;
tempFile = new PrintWriter("E:/TempFile.dat");

Copyright 2014 by Janson Industries
Have to enclose in try/catch or
specify throws IOException in
method header
86
Modifying Files Java


To append to a file you also use
a PrintWriter
But you create a FileWriter object
and specify the file name and the
value true
PrintWriter customerFileOut = null;
customerFileOut =
new PrintWriter(new FileWriter("E:/Customer.dat", true));
Copyright 2014 by Janson Industries
87
Modifying Files Java

To write you use the PrintWriters
print or println methods
customerFileOut.println("Frank Smith");
String custName = "Joe Blow"
customerFileOut.print(custName);


println writes data to a new line
in the file
print writes to the same line
Frank SmithJoe Blow
Copyright 2014 by Janson Industries
88
Modifying Files in Java
import
import
import
import
import
import
java.io.File;
java.io.FileNotFoundException;
java.io.FileWriter;
java.io.IOException;
java.io.PrintWriter;
java.util.Scanner;
public class FileMod {
static Scanner keyboard = new Scanner(System.in);
public static void main(String[] args) {
main method
String option = "";
// Display menu of options
while (!option.equals("4")) {
System.out.println("What would you like to do? Enter:");
System.out.println("1 to add a customer");
System.out.println("2 to modify a customer");
System.out.println("3 to display a customer");
System.out.println("4 to end the pgm");
89
= keyboard.nextLine();
Copyright 2014 byoption
Janson Industries
// Invoke correct method based on option selected
if (option.equals("1")) {
addRecord();
} else {
if (option.equals("2")) {
modifyRecord();
} else {
if (option.equals("3")) {
displayRecord();
}
}
}
}
Modifying Files in Java
}
public static void addRecord() {
addRecord method
// Variables to hold file data
String custToAdd, custNameInFile, tempVariable;
boolean recordExists = false;
// Variables for reading and writing to the customer file
Scanner customerFile = null;
90
PrintWriter
customerFileOut = null;
Copyright 2014
by Janson Industries
// Retrieve the customer name to add
custToAdd = getCustomerName();
// Create the scanner object to read the customer file
try {
customerFile = new Scanner(new File("E:/Customer.dat"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// Read every record and compare every third record
//with the new name
while (customerFile.hasNext() && recordExists == false) {
custNameInFile = customerFile.nextLine();
if (custNameInFile.equals(custToAdd)) {
recordExists = true;
} else {
for (int ctr = 1; ctr < 3; ctr++) {
tempVariable = customerFile.nextLine();
}
}
}
91
customerFile.close();
Copyright 2014
by Janson Industries
Modifying Files in Java
// If customer name is already in file, don't add
if (recordExists == true) {
System.out.println("Sorry there is already a record for
customer " + custToAdd);
} else {
// Create PrintWriter object to append to customer file
try {
customerFileOut = new PrintWriter(new FileWriter(
"E:/Customer.dat", true));
} catch (IOException e) {
e.printStackTrace();}
// Append the new name, address and CSZ to the customer file
customerFileOut.println(custToAdd);
System.out.println("What is the customers street address");
tempVariable = keyboard.nextLine();
customerFileOut.println(tempVariable);
System.out.println("What is the customers city, state and zip");
tempVariable = keyboard.nextLine();
customerFileOut.println(tempVariable);
System.out.println("Customer " + custToAdd + " added");
customerFileOut.close();
}
92
End of addRecord method
} 2014 by Janson Industries
Copyright
public static void modifyRecord() {
String custToMod, custNameInFile, tempVariable;
boolean recordExists = false;
modifyRecord method
custToMod = getCustomerName();
// Variables and objects for reading and writing
// to the customer and temp files
Scanner tempFileIn = null;
Scanner customerFile = null;
PrintWriter tempFile = null;
PrintWriter customerFileOut = null;
try {
customerFile = new Scanner(new File("E:/Customer.dat"));
tempFile = new PrintWriter("E:/TempFile.dat");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// Read the customer file and write the info to the temp
// file until the customer to modify is found
while (customerFile.hasNext() && recordExists == false) {
custNameInFile = customerFile.nextLine();
tempFile.println(custNameInFile);
if (custNameInFile.equals(custToMod)) {
93
recordExists = true;
Copyright 2014 by Janson Industries
} else {
for (int ctr = 1; ctr < 3; ctr++) {
tempVariable = customerFile.nextLine();
tempFile.println(tempVariable);
}
}
modifyRecord method
}
// If the customer name not in file, don't allow change
if (recordExists == false) {
System.out.println("Sorry there is no record for customer
" + custToMod);
customerFile.close();
} else {
// Get the current customer info and display it
// Read the new info and write it to the temp file
tempVariable = customerFile.nextLine();
System.out.println("This is the customers current street
address ");
System.out.println(tempVariable);
System.out.println("What is the customers new street
address ");
tempVariable = keyboard.nextLine();
94
tempFile.println(tempVariable);
Copyright 2014 by Janson Industries
tempVariable = customerFile.nextLine();
System.out.println("This is the customers current city,
state and zip ");
System.out.println(tempVariable);
System.out.println("What is the customers new city, state
and zip ");
tempVariable = keyboard.nextLine();
tempFile.println(tempVariable);
System.out.println("Customer " + custToMod + " changed");
// Write the rest of the customer records to the temp file
while (customerFile.hasNext()) {
tempVariable = customerFile.nextLine();
tempFile.println(tempVariable);
}
// Close the files the create new objects to
// read the temp file and write to the customer file
customerFile.close();
modifyRecord method
tempFile.close();
try {
tempFileIn = new Scanner(new File("E:/TempFile.dat"));
customerFileOut = new PrintWriter("E:/Customer.dat");
} catch (FileNotFoundException e) {
95
Copyright 2014 by Jansone.printStackTrace();}
Industries
// Copy all the temp file records to the customer file
while (tempFileIn.hasNext()) {
tempVariable = tempFileIn.nextLine();
customerFileOut.println(tempVariable);
}
customerFileOut.close();
End modifyRecord
tempFileIn.close();
method
}
}
// Display a particular customers record.
// Uses same logic as FileLoop.
displayRecord method
public static void displayRecord() {
String custToDisp, custNameInFile, tempVariable;
boolean recordExists = false;
Scanner customerFile = null;
custToDisp = getCustomerName();
try {
customerFile = new Scanner(new File("E:/Customer.dat"));
} catch (FileNotFoundException e) {
96
e.printStackTrace();
}
Copyright 2014 by Janson
Industries
while (customerFile.hasNext() && recordExists == false) {
custNameInFile = customerFile.nextLine();
if (custNameInFile.equals(custToDisp)) {
recordExists = true;
System.out.println(custNameInFile);
for (int ctr = 1; ctr < 3; ctr++) {
tempVariable = customerFile.nextLine();
System.out.println(tempVariable); }
System.out.println("");
}
}
if (recordExists == false) {
System.out.println("Sorry there is no customer " +
custToDisp); }
customerFile.close();
End displayRecord method
}
public static String getCustomerName() {
String custName;
System.out.println("What is the customers name");
custName = keyboard.nextLine();
return custName;
getCustomerName
}
method
}
Copyright 2014 by Janson Industries
97
Modifying Files - Java

Given this data
Copyright 2014 by Janson Industries
98
Modifying Files - Java
Choose add
Add new
customer
Display newly
added customer info
Copyright 2014 by Janson Industries
99
Modifying Files - Java
Choose modify
Change some
of the data
Display changed
customer info
Copyright 2014 by Janson Industries
100
Modifying Files - Java
Test that all
checks work
Try to add an already
existing customer
Try to change and
display a nonexisting customer
Copyright 2014 by Janson Industries
101
Modifying Files - Java

And this is the data at the end
Copyright 2014 by Janson Industries
102
Processing File Data

Files can hold both text and
numbers
 Instead
of using parallel arrays can
use files to hold different types of info
103
Copyright 2014 by Janson Industries
Processing Data

And a language like Java lets you
read individual values not just the
whole record
 next()
gets all text up to the next
space
 nextInt()
gets all text up to the next
space and converts it to an integer
 nextDouble()
gets all text up to the
next space and converts it to a
double
All of these do not advance the
cursor to the next line!
Copyright 2014 by Janson Industries

104
Processing Data

Not nitpicking! If file had the
following budget data
Rent
500
Car
280
Utilities
175

And you tried to process with
these statements
While (not eof)
name = infile.nextLine()
amount = infile.nextDouble()
End While
Copyright 2014 by Janson Industries
105
Processing Data


There would be an exception the
second time nextDouble executed
WHAAAAAAAT!!
 Must
show where cursor is after
each statement executed to
understand

First nextLine() reads "Rent" and
places cursor at the beginning of
the second line in the file
106
Copyright 2014 by Janson Industries
Processing Data

When nextDouble executed 500
read and cursor placed at end
after the second 0
Rent
500
Car
280
Utilities
175
Cursor after
first read

Cursor after
second read
When the second nextLine
executed it reads the rest of the
second line
A
Copyright 2014 by Janson Industries
big fat null
107
Processing Data

And moves cursor to beginning of
third line
Cursor after 3rd read
(2nd nextLine)

Rent
500
Car
280
Utilities
175
Now when second nextDouble
executed
 InputMismatchException
 Tries
to convert "Car" into a double
108
Copyright 2014 by Janson Industries
Processing Data

Solution:
 Execute
another nextLine after the
nextDouble
 Forces
the cursor to the line after the
line with the double value
While (not eof)
name = infile.nextLine()
amount = infile.nextDouble()
infile.nextLine()
End While
109
Copyright 2014 by Janson Industries
Processing Data

When using files like this, there is
generally a file specification
document which
 Identifies
each field of data with a
 Name
 Location
within the file
 Size (optional)
 Data type
110
Copyright 2014 by Janson Industries
Processing Data


So we could have stored the
customer data like this
The file specification would look
something like this…
111
Copyright 2014 by Janson Industries
Processing Data
File Name: customer.dat
Description: contains the name and
address of each customer
Field Description
Customer first name
Customer last name
Street number
Street name
Street type
City
State
Zip code
Data Type
String
String
String
String
String
String
String
String
112
Copyright 2014 by Janson Industries
Processing Data

Storing data this way could cause
problems
 What
if street name is comprised of
multiple words
 23
Pond View Dr.
 14 Puppy Dog Tr.
 2300 Martin Luther King Hwy

How do you know how many reads
to do?
 Could
add a new field that has the
street name length (number of words)
113
Copyright 2014 by Janson Industries
Processing Data
Joe Customer 1 1 Main St Enid, OK
34343
Mary Buyer 2 1 Oak St. Muncie, IN 54545
Terry Smith 3 1 Pine Ave. Palatka, FL 32273
Pat Jones 4 1 Lake Dr. Erie, PA
23232
Frank Smith 5 1 Minerva La Ronkonkoma, NY
11783
Joe Blow 23 2 Pond View Dr. Santa Barbara, CA 99999
Sue Banks 14 2 Puppy Dog Tr. Walla Walla, WA 97654
Al Adams 2300 3 Martin Luther King Hwy El Paso, NM 83536


Uh-oh what about city now?
This is why text files are of limited
use and DBMS are so important
114
Copyright 2014 by Janson Industries
Processing Data

Control breaks are interuptions in
normal program execution
 Like
when a record was modified
 Normal
processing was copying the data
from the customer file to the temp file
 When the customer to change was
reached, different instructions were
performed
• The new info was retrieved from the user and
written to the temp file
 Then

the copying continued
Control breaks used frequently
when printing reports
Copyright 2014 by Janson Industries
115
Control Breaks

Example, a report that has the
following format:
 Report
 For
header (on first page)
each subsequent page
A
page header with page number
 For next 33 items
• Print line item (from file data)
A
page footer with page number
 Report
footer (on last page)
116
Copyright 2009 by Janson Industries
Control Breaks
Wisconsin State
Sales Report
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
:
:
:
:
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
:
:
:
:
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
:
:
:
:
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
Detailed Wisconsin Sales Report – page 2
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
:
:
:
:
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
Copyright 2009 by Janson Industries
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
:
:
:
:
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
:
:
:
:
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
:
:
:
:
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
:
:
:
:
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
:
:
:
:
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
:
:
:
:
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
:
:
:
:
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
End of page 2
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
:
:
:
:
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
:
:
:
:
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
:
:
:
:
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
:
:
:
:
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
:
:
:
:
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
117
Control Breaks
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
:
:
:
:
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxxxxx xxxxxxx
xxxxxxxx xxxxxxx
xxxxxxxx xxxxxxx
xxxxxxxx xxxxxxx
xxxxxxxx xxxxxxx
xxxxxxxx xxxxxxx
xxxxxxxx xxxxxxx
:
:
:
:
:
:
:
:
xxxxxxxx xxxxxxx
xxxxxxxx xxxxxxx
xxxxxxxx xxxxxxx
xxxxxxxx xxxxxxx
xxxxxxxx xxxxxxx
xxxxxxxx xxxxxxx
xxxxxxxx xxxxxxx
Detailed Wisconsin Sales Report – page 3
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
:
:
:
:
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxxxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
:
:
:
:
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
:
:
:
:
:
:
:
:
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
:
:
:
:
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
:
:
:
:
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
:
:
:
:
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxxxxx xxxxxxx xxxxxxx xxxx
xxxxxxxx xxxxxxx xxxxxxx xxxx
xxxxxxxx xxxxxxx xxxxxxx xxxx
xxxxxxxx xxxxxxx xxxxxxx xxxx
xxxxxxxx xxxxxxx xxxxxxx xxxx
xxxxxxxx xxxxxxx xxxxxxx xxxx
xxxxxxxx xxxxxxx xxxxxxx xxxx
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
xxxxxxxx xxxxxxx xxxxxxx xxxx
xxxxxxxx xxxxxxx xxxxxxx xxxx
xxxxxxxx xxxxxxx xxxxxxx xxxx
xxxxxxxx xxxxxxx xxxxxxx xxxx
xxxxxxxx xxxxxxx xxxxxxx xxxx
xxxxxxxx xxxxxxx xxxxxxx xxxx
xxxxxxxx xxxxxxx xxxxxxx xxxx
End of page 3
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
:
:
:
:
:
:
:
:
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
xxxxxxxxx xxxxxxx
End of
Wisconsin State
Sales Report
118
Copyright 2009 by Janson Industries
Control Breaks
Module main()
Declare Integer pageCtr = 1, lineCtr = 0
Declare String reportHeader = "Wisconsin State Sales Report "
Declare String pageHeader = " Detailed Wisconsin Sales Report
– page "
Declare String pageFooter = " End of page ", tempVariable
Display reportHeader
Skip to next page
pageCtr = pageCtr + 1
// Declare and open the file
Declare InputFile salesFile
Open salesFile "sales.dat"
// Priming read
Read salesFile tempVariable
119
Copyright 2009 by Janson Industries
Use Nested Loops
Outer
Loop
While (not eof)
Display pageHeader, pageCtr
While (lineCtr < 33 AND not eof)
Display tempVariable
Inner
lineCtr = lineCtr + 1
Loop
Read salesFile tempVariable
End While
lineCtr = 0
Display pageFooter, pageCtr
Skip to next page
pageCtr = pageCtr + 1
End While
Display reportFooter
End Module
Copyright 2009 by Janson Industries
120
Points to Remember


Files can hold many values of
differing types
Hold data permanently
 Progam
ends but data is still in
the file

Just as with arrays, easiest to
process files with loops
121
Copyright 2014 by Janson Industries
Assignments

Non-Graded
Chap

9 labs 9.1-9.3
Graded
Chap
9 lab 9.4
122
Copyright 2014 by Janson Industries