CS51 - Fall 2009 - Lecture 33
Exercise 18.5.1
look at
StupidName code
- try it without try-catch block
- compiler complains: "Unhandled exception type IOException"
checked vs. unchecked exceptions
we have two options for dealing with checked exceptions
- we can put a try catch block around the code
- or, we can say that we don't want to deal with it here and announce to the word that our method throws that exception
- we do this by appending: "throws <exception_class_name>" after the method description before the '{'
throwing exceptions
- two reasons why a method is required to announce that is throws a particular exception
- a method it calls throws an exception and the method doesn't handle it
- the method explicitly throws an exception
- throw new <exception_class_name>()
- note it's just a constructor for a class
<exception_class_name> exceptionToThrow = new <exception_class_name>();
throw exceptionToThrow;
- throw is similar to return... exits the current code
show
StupidNameWithBadName demo
- how can we do this?
- We could modify readName(), but what should we return if there is a problem?
- We could modify our begin method to check if the name is good, but then we'd have to check that every time we called the readName method
- Use an exception
- We can define our own exceptions by extending Exception
- look at BadNameException
- usually end the class name with "Exception"
- override getMessage() method
- could in theory extend RuntimeException, in which case it would be an unchecked exception. In general, good coding practice to make all you exceptions checked.
Why do we need files?
- persist data
Basic computer hardware
- processor
- main memory
- hard-drive
show
SantasListBasic demo
- similar to BadName
- now we don't have to enter the names
- we can read them from a file
What operations might you do on a file?
- open
- read
- write
- close/save
Reading data from files
- Parent class is "Reader"
- Two main Readers
- FileReader(String filename)
- read() // reads one character at a time
- is of type "Reader"
- BufferedReader(Reader reader)
- readLine();
- returns the next whole line as a String
- if no more data is available (end of file) returns null
- notice it takes as input another reader, why?
- we'll see later, can be used for more than just reading files
- could pass in another type of reader
- is also of type "Reader"
- Both of these classes are in java.io
- we need to import these classes at the top, like we do with objectdraw:
import java.io.*;
look at names file
BufferedReader reader = new BufferedReader(new FileReader(String filename))
- how can we read all of the data from the names file using a BufferedReader?
look at
SantasListBasic code
- try-catch IOException
- when creating readers (i.e. opening the file), why?
- file could not be there
- file could not be readable (i.e. you don't have access to read it)
- when reading data from a file
- device failure (i.e. hard-drive fails or has problems)
- corrupted file
- Common setup when reading data
//read one line
while( line != null ){
// do something with the line
// read another line
}
- import java.io.*;