Workshop for Programming And Systems Management Teachers Chapter 11

advertisement
Workshop for Programming And
Systems Management Teachers
Chapter 11
Input / Output and Exceptions
Georgia Institute of Technology
Learning Goals
• Understand at a conceptual and practical level
–
–
–
–
–
–
Standard input and output
Streams
How to handle exceptions
How to read from a character file
How to write to a character file
How to read and write objects (serialization)
Georgia Institute of Technology
Standard Input and Output
• We have been using System.out.println to print
output to a PrintStream (standard output).
System.out.println(“First Name: “ + firstName);
• There is also a System.err PrintStream that can
be used to write to the standard error output.
System.err.println(“Error: no file name given”);
• You can use System.in to read a byte or bytes
from an InputStream (standard input).
int numGrades = System.in.read();
Georgia Institute of Technology
Input and Output Streams - java.io
• Java handles input and output through
sequential streams of bits
• Programs can read from a stream or write to a
stream
Source
or
Destination
100110
Byte Data
Character Data
File
String
Pipe
Array
Georgia Institute of Technology
Program
Character versus Byte Streams
• Java input and output classes are categorized
by the type of data they handle
– Character
• use Reader/Writer classes
– Byte
• use Stream classes
• Java input and output classes can also be
categorized by
– data sink classes (read and write data from different
sources like files, pipes, memory)
– processing classes (process the data, filter it, buffer it,
print it)
Georgia Institute of Technology
Data Sink Classes
Sink Type
Character Streams
Byte Streams
File
FileReader
FileWriter
FileInputStream
FileOutputStream
Memory
CharArrayReader
CharArrayWriter
StringReader
StringWriter
ByteArrayInputStream
ByteArrayOutputStream
StringBufferInputStream
Pipe
PipeReader
PipeWriter
PipeInputStream
PipeOutputStream
Georgia Institute of Technology
Processing Classes
Process
Character Streams
Byte Streams
Buffering
BufferedReader
BufferedWriter
FilterReader
FilterWriter
LineNumberReader
BufferedInputStream
BufferedOutputStream
FilterInputStream
FilterOutputStream
ObjectInputStream
ObjectOutputStream
DataInputStream
DataOutputStream
LineNumberInputStream
PushbackReader
PushbackInputStream
PrintWriter
PrintStream
Filtering
Object
Serialization
Data
Conversion
Counting
Peeking
Ahead
Printing
Georgia Institute of Technology
Chaining Input and Output Classes
• Often input or output
classes are chained
– Passing one type of
input/output class to the
constructor for another
• One common thing is to
chain a processing class
with a data sink class
– Like a BufferedReader or
BufferedWriter and a
FileReader or FileWriter
new BufferedReader(new
FileReader(fileName));
Georgia Institute of Technology
Exceptions
• Exceptions are disruptions in the normal flow of
a program. Exception is short for exceptional
event.
• The programmer is required to handle checked
exceptions in Java
– like trying to read from a file that doesn’t exist
• Run-time exceptions do not have to be handled
by the programmer
– like trying to invoke a method on a object reference
that is null
– Children of RuntimeException
Georgia Institute of Technology
Exception Exercise
• Find the documentation for the Exception class
– What package is it in?
– What is the parent class?
• Find the documentation for the RuntimeException class
– What subclasses does it have?
– What is the parent class?
• Find the documentation for the FileNotFoundException
– What is the parent class?
– Does this exception need to be caught?
• Find the documentation for NullPointerException
– What is the parent class?
– Does this exception need to be caught?
Georgia Institute of Technology
Causing Exceptions Exercise
• Try the following in DrJava interaction’s pane
> String temp = null;
> temp.toLowerCase()
• Try the following in DrJava interaction’s pane
> int[] numberArray = {9, 8, 3};
> numberArray[5]
• Try the following in DrJava interaction’s pane
> FileReader reader = new FileReader("test.txt");
• Try the following in DrJava interaction’s pane
> FileWriter writer = new FileWriter("test.txt");
Georgia Institute of Technology
Try and Catch
• Use a try & catch clause to catch an exception
try {
code that can cause exceptions
} catch (ExceptionClassName varName) {
code to handle the exception
} catch (ExceptionClassName varName) {
code to handle the exception
}
• You can catch several exceptions
– Make the most general one last
– All exceptions are children of the class Exception
Georgia Institute of Technology
Try and Catch Example
• What if you want to know if a file isn’t found
– That you are trying to read from
– If this occurs you might want to use a JFileChooser to
let the user pick the file
• You also want to handle any other error
try {
code that can cause the exception
} catch (FileNotFoundException ex) {
code to handle when the file isn’t found
} catch (Exception ex) {
code to handle the exception
}
Georgia Institute of Technology
Catching Exceptions
• A catch clause will catch the given Exception
class and any subclasses of it.
• So to catch all exceptions use:
try {
code that can throw the exception
} catch (Exception e) {
System.err.println(“Exception: “ + e.getMessage());
System.err.println(“Stack Trace is:”);
e.printStackTrace();
}
• You can create your own exceptions by
subclassing Exception or a child of Exception.
Georgia Institute of Technology
The optional finally clause
• A try and catch statement can have a finally
clause
– Which will always be executed
• Will happened if no exceptions
• Will happened even if exceptions occur
– Used for releasing resources
try {
code that can cause the exception
} catch (FileNotFoundException ex) {
code to handle when the file isn’t found
} finally {
code to always be executed
}
Georgia Institute of Technology
Throwing an Exception
• Use a throw clause to throw an exception
/** Method that throws an exception */
public retValue methodName() throws
ExceptionClassName {
...
if (errorCondition) throw new ExceptionClassName();
}
• The method must report all exceptions that it
throws
Georgia Institute of Technology
Reading Lines of Character Data
• Enclose the code in a try and catch clause
– Catch FileNotFoundException if the file doesn’t exist
• And you want to give the user a chance to specify a new file
using a JFileChooser
– Catch Exception to handle all other errors
• Create a buffered reader from a file reader for
more efficient reading
– File names are relative to the current directory
• Loop reading lines from the buffered reader until
the line is null
– Do something with the data
• Close the buffered reader
Georgia Institute of Technology
Reading from File Example
BufferedReader reader = null;
String line = null;
// try to read the file
try {
// create the buffered reader
reader = new BufferedReader(new FileReader(fileName));
// loop reading lines till the line is null (end of file)
while ((line = reader.readLine()) != null)
{
// do something with the line
}
// close the buffered reader
reader.close();
} catch (Exception ex) {
// handle exception
}
Georgia Institute of Technology
Read From File Exercise
• Modify
FortuneTellerPanel.java
to add a constructor that
takes a file name and
reads the items for the
array of fortunes from that
file
– The first item in the file is
the number of fortunes
• To use to create the array
• If there is any error tell
the user and use the
original array of fortunes
Georgia Institute of Technology
Writing to a File
• Use a try-catch clause to catch exceptions
– Create a buffered writer from a file writer
writer = new BufferedWriter(new FileWriter(fileName));
– Write the data
writer.write(data);
– Close the buffered writer
• writer.close();
Georgia Institute of Technology
Writing to a File Example
BufferedWriter writer = null;
PictureInfo info = null;
String endOfLine = System.getProperty("line.separator");
// Try to write the picture information
try {
// create a writer
writer = new BufferedWriter(new FileWriter(directoryName + infoFileName));
// write out the number of picture information objects
writer.write(pictureInfoArray.length + endOfLine);
// loop writing the picture info to the file
for (int i = 0; i < pictureInfoArray.length; i++)
{
info = pictureInfoArray[i];
writer.write(info.getFileName() + "|" + info.getCaption() + "|" + endOfLine);
}
// close the writer
writer.close();
} catch (Exception ex) {
System.out.println("Trouble writing the picture information to " + infoFileName);
}
Georgia Institute of Technology
Saving and Restoring Objects
• Applications often need to save the current
objects to a file.
– So they aren’t lost when the application is stopped
• Applications often read objects from files.
– In the main method you call a method to read in the
objects from a file
• Java provides classes to read objects and write
objects
– ObjectInputStream, ObjectOutputStream
Georgia Institute of Technology
Object Output
– Import the package java.io
• import java.io.*;
– Make the object serializable
• public class Name implements Serializable
– Open the file for output using a FileOutputStream
• FileOutputStream fOut = new FileOutputStream(“fileName”);
– Create an ObjectOutputStream using the
FileOutputStream as a parameter to the constructor.
• ObjectOutputStream oOut = new ObjectOutputStream(fOut);
– Output the object
• oOut.writeObject(theObject);
– Flush to make sure all objects are written
• oOut.flush();
Georgia Institute of Technology
Write Objects Exercise
• Modify WriteObjects/Person.java
– Create a class method that takes an array of Person
objects and writes them to a file with the passed
name
– Modify the main method to create an array of Person
objects and call the method to write them to a file
• Make objects for yourself and your family
Georgia Institute of Technology
Object Input
• To input an object we need to
– Import the package java.io
• import java.io.*;
– Make the object serializable
• public class Name implements Serializable
– Open the file for input using a FileInputStream
• FileInputStream fIn = new FileInputStream(“fileName”);
– Create an ObjectInputStream using the
FileInputStream as a parameter to the constructor.
• ObjectInputStream oIn = new ObjectInputStream(fIn);
– Input the object - must cast to class
• objectName = (ClassName) oIn.readObject();
Georgia Institute of Technology
Read Objects Exercise
• Edit ReadObjects/Person.java
– Create a class method to read Person objects from a
passed file name
• And return an array of Person objects
– Modify the main method to call this method
• And loop through the array of Person objects and use
System.out.println(person) to print each
Georgia Institute of Technology
Summary
• There are many classes in java.io for handling
input and output
• Use a buffer to make input or output more
efficient
• Checked exceptions in java must be caught with
a try and catch (optional finally) clause
– The code will not compile if the exception isn’t caught
or thrown to the caller
– Runtime exceptions (children of RuntimeException)
do not have to be in a try and catch clause
Georgia Institute of Technology
Download