Anda di halaman 1dari 41

File I/O

Chapter 10

Chapter Contents
Chapter Objectives
10.1 Introductory Example: Weather Data Analysis
10.2 Java/s I/O System: Readers, Writers, Streams
10.3 Exceptions
10.4 More About I/O Streams
10.5 Example: Scanning for a Virus
10.6 Example: Student Data Retrieval
10.7 Graphical/Internet Java: Student Data Retrieval GUI
Part of the Picture: Data Base Systems

Chapter Objectives

Study

Java's I/O with text and binary files


Examine role of exceptions in I/O
Observe use of files in GUI programs in
context of an information retrieval problem
Learn about the role of files in database
management systems

Need for File Access


Files

saved for word processors, spreadsheet


programs, etc.
Saved on secondary memory

hard disks, floppy disks, CD-ROMs, etc.

Requirements

information stored in secondary

memory

can be retrieved in the future


kept separate from other documents, programs, etc.

Intro Example: Weather Data


Analysis
Problem:

large amounts of weather-related


data is recorded and processed

year's worth of atmospheric pressure readings


taken every 15 minutes
stored in a text file pressure.dat

Weatherman

needs minimum, maximum, and


average of the data
Data must be read from file, statistics
calculated, results written to a text output file

Solution Overview
Note

source code, Figure 10.1


Names of input and output files are given to the
program via the args parameter
input file is args[0]
output file is args[1]
Command to open the input file
BufferedReader in = new BufferedReader (
new FileReader
(args[0]));
Input
file is a static

Reading text from input file


valueString = in.readLine();

Input file is a static


object with
readLine() method

Solution Overview
Opening text output file
PrintWriter out = new PrintWriter (
new BufferedWriter(
new Filewriter (args[1])));
Writing text values to a file
out.println ( . . . );
Closing the
in.close();

files
out.close();

Handling Exceptions
Many

files

things can go wrong when dealing with

requested input file does not exist


input file has invalid data
output file unavailable

When

such an error occurs, the method in


which the problem happened "throws an
exception"

Java can "catch" the exception if it happens in a "try


block"
Note the try { } block in the source code

Handling Exceptions
A try

block is followed by one or more "catch


blocks"

Note the source code:


catch (Exception anException)
{ Controller.fatal ( ) ; }

This

catch block will

determine the kind of exception


report the problem
terminate the program

10.2 Java's I/O System:


Readers, Writers, and Streams
All

input and output in Java is accomplished by


classes called streams
Input streams provide ways to move bytes of
data from an input device to a program
Output streams move the data in the opposite
direction
Output
Stream

Input
Stream
Executing Program

Predefined Streams
System.in

InputStream object, usually for the keyboard

System.out

a buffered PrintStream object, usually the


screen or an active window

System.err

an unbuffered PrintStream object usually


associated with the screen or console window

Wrapping Classes
class provides methods for
reading bytes only

InputStream

to read at a higher level we must "wrap"


System.in with another class

Example:

BufferedReader class

BufferedReader myReader =
new (BufferedReader (
new InputStreamReader( System.in));
Now

we can send myReader either

the .read() message for a single char value or


the .readLine() message for an entire line of text

Using Readers and Writers


and Writer classes provide support
for char (16-bit Unicode) I/O
InputStream and OutputStream provide
support for byte I/O
The Java language is still growing and
"maturing"
Reader

extensions of Reader and Writer classes have yet to


be fully accepted
author of this text suggests: Use Reader or Writer
class whenever possible, use Stream class only
when there is no Reader/Writer class that fits

Using a Reader
Wrap

FileReader in BufferedReader

class
BufferedReader inFile =
new BufferedReader (
new FilReader (input_filename) );
Now

the BufferedReader object (inFile) can


be sent a .readLine() message
A BufferedReader is so named because it
buffers the input

this improves program performance

Using a Reader
How

to know when all the data in a file has


been read?

the readLine() method returns the value null


valueString = inFile.readLine():
while (valueString != null)
{
// process valueString
valueString = inFile.readLine();

Also

possible to check for other things such as


an empty line with no text
if (valueString.equals("")) continue;

Using a Reader
Sequence of steps for using text input
1.
2.

Build a BufferedReader by wrapping one


around a FileReader
Use an input loop to read lines of text from the
BufferedReader

3.

Convert those lines to numeric values if necessary

Close the BufferedReader

Using a Writer
When

writing values to a text file, author


suggests use a Writer class

increase FileWriter capabilities by wrapping it in


BufferedWriter and PrintWriter classes

PrintWriter outFile = new PrintWriter(


new BufferedWriter (
new FileWriter (file_name) ) );

10.3 Exceptions
Easy

for things to go wrong in a program

faulty logic
bad input from user, etc.

Java

classifies all these as "exceptional


occurrences"

provides Exception class


tells something abnormal occurred

Try-Catch Blocks

To signal an abnormal occurrence

method can throw an exception


throw occurs inside a try block

try block followed by one or more catch blocks


Exception thrown here
Form:
try { statement list }
Program searches
catch (Exception_Type1 variable_name
)
catch1 blocks
{ }
looking for type
catch (Exception_type2 variable_name
match for
2)exception
When match found, that block of
thrown
{ }
statements executed
finally
{ }

Try-Catch Blocks
After catch

If

If

block executed

execution continues in finally { } block or


if no finally { }, continues to next statements
following catch { }

no matching exception type is found


program terminates

no exception thrown
catch blocks skipped
execution continues in finally { } or in
statements following catch block

Exception Hierarchy
Most general class
E x c e p t io n
D a t a F o r m a t E x c e p t io n
E O F E x c e p t io n

I O E x c e p t io n

F ile N o t F o u n d E x c e p t io n

. . .
. . .

Exceptions become
more specialized

R u n t im e E x c e p t io n
I n t e r r u p t e d I O E x c e p t io n

Try/Catch Strategy
Wrap

all calls to methods that throw exceptions


in single try block

followed by single catch block .. or


followed by sequence of catch blocks, one for each
type of exception

Wrap

each call to a method that throws an


exception in its own try block

a catch block exists for each particular exception


thrown

Throwing Exceptions
Method

that throws an exception must explicitly


state this in its heading

public void read(BufferedReader aReader)


throws EOFException
Now

calling method must invoke this method


using try-catch blocks to handle the potential
exception

10.4 More About I/O Streams


Data

can be stored in a file as text or in binary


format

same format used to store values in memory


takes less space to store an integer in binary format
than in text format

Java

Stream classes provide byte level I/O


FileOutputStream
FileInputStream
Also BufferedOutputStream and
BufferedInputStream

Writing Primitive types


Java

provides DataOutputStream and


DataInputStream classes
Note methods provided, Table 10.1

note number of bytes used to store the data

Consider

Data Stream Demonstration, Figure


10.3 in text note the features
contents
Why
Whydoes
does
contentsof
of

numbers.dat
wrapping of Stream I/O classes
numbers.dat
appearto
tobe
begibberish?
gibberish?
use of try-catch blocks appear
specific methods used to write, then read
sample run

Writing Sequence of Values


Consider

a group of values of different types


that are written to a file

they must be read in the same order that they were


written

Possible

to create a class

that group of values is the private data of the class


specific methods are provided for an object of the
class to write/read those values to/from a file
the read and write methods receive the file handles
as parameters

10.5 Example: Scanning for a Virus


What

is a virus?

software that hides itself within other executable


programs
that executable program is the "host" for the virus
the virus program tries to "infect" other programs
the virus can cause problems that range from
annoying to malicious

A virus

that prints an annoying message stores


that string value within itself

we will write a program that searches through a file


to find that text, or signature

Virus-Detection Algorithm
1.

Repeat the following:


a)
b)
c)
d)

read a line from a file


if no line read due to EOF, terminate
otherwise scan the line for specified string of text
if that text found, stop reading from file

2.

Display message whether or not target string


was found signifying virus found/not found

Note source code, Figure 10.4

Simulated Virus Scanning


Note

use of command line arguments

first argument is the name of the file to be read


second argument is the target string or virus
signature

Observe

other features studied in this chapter

use of try/catch
wrapping of classes for file read

10.6 Example:
Retrieving Student Information
Problem:

Information Retrieval
Records of information about students consist of

studentID, a 9 digit integer


first name, last name as strings
studentYear as a string
credits and GPA as reals

We

seek a program which will

read a sequence of students from students.txt


prompt for studentID, read from keyboard
search for match, display if found

Objects
Objects

Type

Kind

Name

Individual Student Student

varying

Number of
students

int

varying

numberOfStudents

Sequence of
students

StudentSequence

varying

students

Name of input file String

constant

args[0]

A student ID
number

int

varying

studentID

Position of the
student

int

varying

position

Student Class
Operations

needed include

initialize itself with default values


initialize itself with explicitly supplied values
read its attributes from a BufferedReader & store
them in itself
convert itself to a String (for output)
access each of its attributes
mutate any of its attributes

Note

methods provided for these capabilities in


source code of Figure 10.5

Program Algorithm
1.

Build students as a StudentSequence


a)
b)

2.

initialized from an input file


name of file received in args[0]

Repeatedly do the following:


a)
b)
c)

prompt for and read studentID


search students for target studentID, return its
position
if search successful
display student at position
otherwise
display error message

Class StudentSequence
Note

source code, Figure 10.6


Reads numberOfStudents as first value in
the file
Constructor declares myStudents, an array of
Student
Use numberOfStudents as limiting value in
for loop

stores incoming values in myStudents array

Provides

linear search method, find()

Student Information Retrieval


Note

source code, Figure 10.7


Program declares students, object of type
StudentSequence

constructor loads values from file

Forever

loop used to

prompt for, receive as input student id


call .find method to determine position of that
student in the array
print results (found or not)

10.7 Graphical/Internet Java:


Student Data Retrieval GUI
Implement

student data retrieval problem


internet GUI context
Much of work already done can be reused
Behavior
GUIStudentRetriever
Bottom portion not
visible until id
entered and
processed
Alternatively, a "not
found" message
would appear here

Enter Student ID :
Bill
Freshman

111223333
Board

Credits

16.0

GPA 3.15

Implementation
Methods

for GUIStudentRetreiver

constructor
action handler
enter initial state
enter found an ID state
enter not found state

Attributes

labels
entry fields
panes for panels

Event-Handler Method
public void actionPerformed(ActionEvent event)
{ String idString = myIdField.getText();
if (idString.equals(""))
enterInitialState();
else
{ int id = Integer.parseInt(idString);
int position = myStudents.find(id);
if (position >= 0)
enterGoodIDState(myStudents.getStudent(position));
else
enterErrorState("No student found with that ID");
}
}
Note
Notesource
sourcecode,
code,Figure
Figure10.8
10.8

Part of the Picture:


Database Systems
Businesses
Based

must make decisions

on data

accuracy and detail help make better decisions


large data sets stored on computers

Data

sets maintained by Database


Management Systems (DBMS)

DBMS Facilities
High

level views of the data


Access routines

query language

Support

for large databases

as large as 1000 gigabytes (one terabyte)

Security

data is sensitive or proprietary

Data

sharing

protect data when more than one person wishes to


access/ modify same piece of data

Data

integrity

Relational Model
Database

viewed as a set of tables, called

relations

one row for each entry


column for each attribute or field of the database

SQL,

"Structured Query Language"

provides commands for manipulate data

Example

SELECT * FROM Employee WHERE Rate = 10.5


Retrieve

All records

Name of
Relation

Condition

Anda mungkin juga menyukai