Big Java 4

Chapter 11 – Input/Output and Exception Handling

Chapter Goals

Reading Text Files

Writing Text Files

FileNotFoundException

A Sample Program

ch11/lines/LineNumberer.java

Your browser does not support the <object> tag.

Self Check 11.1

What happens when you supply the same name for the input and output files to the LineNumberer program?

Self Check 11.2

What happens when you supply the name of a nonexistent input file to the LineNumberer program?

File Dialog Boxes

JFileChooser chooser = new JFileChooser();
FileReader in = null;
if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
{
   File selectedFile = chooser.getSelectedFile();
   reader = new FileReader(selectedFile);
   . . .
}

Reading Text Input: Reading Words

Reading Text Input: Reading Words

Reading Text Input: Processing Lines

Reading Text Input: Processing Lines

Reading Text Input: Processing Lines

Reading Text Input: Reading Numbers

Reading Text Input: Reading Numbers

Reading Text Input: Reading Numbers

Reading Text Input: Reading Characters

Self Check 11.3

Suppose the input contains the characters 6,995.0. What is the value of number and input after these statements?
int number = in.nextInt(); 
String input = in.next();

Self Check 11.4

Suppose the input contains the characters 6,995.00 12. What is the value of price and quantity after these statements?
double price = in.nextDouble(); 
int quantity = in.nextInt();

Self Check 11.5

Your input file contains a sequence of numbers, but sometimes a value is not available and marked as N/A. How can you read the numbers and skip over the markers?

Throwing Exceptions

Example

public class BankAccount
{
   public void withdraw(double amount)
   {
      if (amount > balance)
      {
         IllegalArgumentException exception
               = new IllegalArgumentException("Amount exceeds balance");
         throw exception;
      }
      balance = balance - amount;
   }
   . . .
}

Hierarchy of Exception Classes

Syntax 11.1 Throwing an Exception

Throwing an Exception

Self Check 11.6

How should you modify the deposit method to ensure that the balance is never negative?

Self Check 11.7

Suppose you construct a new bank account object with a zero balance and then call withdraw(10). What is the value of balance afterwards?

Checked and Unchecked Exceptions

Checked and Unchecked Exceptions

Checked and Unchecked Exceptions

Syntax 11.2 throws Clause

Throws Clause

Self Check 11.8

Suppose a method calls the Scanner constructor, which can throw a FileNotFoundException, and the nextInt method of the Scanner class, which can cause a NoSuchElementException or InputMismatchException. Which exceptions should be included in the throws clause?

Self Check 11.9

Why is a NullPointerException not a checked exception?

Catching Exceptions

Catching Exceptions

Syntax 11.3 Catching Exceptions

Catching Exceptions

Self Check 11.10

Suppose the file with the given file name exists and has no contents. Trace the flow of execution in the try block in this section.

Self Check 11.11

Is there a difference between catching checked and unchecked exceptions?

The finally Clause

The finally Clause

FileReader reader = new FileReader(filename);
try
{
   Scanner in = new Scanner(reader);
   readData(in);
}
finally
{
   reader.close(); // if an exception occurs, finally clause is also
                   // executed before exception is passed to its handler
}

The finally Clause

Syntax 11.4 finally Clause

finally Clause

Self Check 11.12

Why was the out variable declared outside the try block?

Self Check 11.13

Suppose the file with the given name does not exist. Trace the flow of execution of the code segment in this section.

Designing Your Own Exception Types

Designing Your Own Exception Types

public class InsufficientFundsException
      extends RuntimeException
{
   public InsufficientFundsException() {}

   public InsufficientFundsException(String message)
   {
      super(message);
   }
}

Self Check 11.14

What is the purpose of the call super(message) in the second InsufficientFundsException constructor?

Self Check 11.15

Suppose you read bank account data from a file. Contrary to your expectation, the next input value is not of type double. You decide to implement a BadDataException. Which exception class should you extend?

Case Study: A Complete Example

Case Study: A Complete Example

ch11/data/DataAnalyzer.java

Your browser does not support the <object> tag.

The readFile Method of the DataSetReader Class

The readFile Method of the DataSetReader Class

The readValue method of the DataSetReader class

private void readValue(Scanner in, int i) throws BadDataException
{
   if (!in.hasNextDouble())
      throw new BadDataException("Data value expected");
   data[i] = in.nextDouble();
}

Animation 11.1: Exception Handling

Link to Flash animation

Scenario

  1. DataSetTester.main calls DataSetReader.readFile
  2. readFile calls readData
  3. readData calls readValue
  4. readValue doesn't find expected value and throws BadDataException
  5. readValue has no handler for exception and terminates
  6. readData has no handler for exception and terminates
  7. readFile has no handler for exception and terminates after executing finally clause
  8. DataSetTester.main has handler for BadDataException; handler prints a message, and user is given another chance to enter file name

ch11/data/DataSetReader.java

Your browser does not support the <object> tag.

ch11/data/BadDataException.java

Your browser does not support the <object> tag.

Self Check 11.16

Why doesn't the DataSetReader.readFile method catch any exceptions?

Self Check 11.17

Suppose the user specifies a file that exists and is empty. Trace the flow of execution.