Re: Trying to Understand Purpose of a Catch Block for IOException in
the Presence of One for FileNotFound
KevinSimonson wrote:
If I write a piece of code that constructs an object of class
<PrintWriter> by passing it an object of class <BufferedWriter>,
constructed by passing _it_ an object of type <FileWriter> (all three
classes under <java.io>), don't have a <throws> clause, have only a
<catch> clause for <FileNotFoundException>, and then try to compile
the code the compiler complains, telling me, "unreported exception
java.io.IOException java.io.IOException: must be caught or declared to
be thrown". Of course, if I put a <catch> clause there for
<IOException>, that fixes the problem and the program compiles just
fine.
If, on the other hand, I write a piece of code that constructs an
object of class <Scanner>, constructed by passing it an object of type
<File>, don't have a <throws> clause for <FileNotFoundException>, and
don't put the constructor call in a <try> block at all, I get a
similar complaint about me not saying anything about exception
<FileNotFound>.
Finally, if I have some code that has constructors for _both
<PrintWriter> and_ <Scanner>, I have to have a <catch> clause for
_both <IOException> and_ <FileNotFoundException>, in order to keep the
compiler happy. But in such a situation I have not been able to find
a way to _actually get <IOException> thrown_! What is the purpose of
having a <catch> block for <IOException> if nothing I do with my code
will actually throw an <IOException> that is not a
<FileNotFoundException>? Or, alternately, is there something I can do
to _get_ an <IOException> that is not a <FileNotFoundException>
thrown?
Since 'FileNotFoundException' is a subtype of 'IOException', a catch block for the latter will catch the former.
Another subtype of 'IOException' that is not a super- or subtype of 'FileNotFoundException' is 'EOFException'. You could write a loop to keep reading a file (that is found) past its end to throw 'EOFException'.
A catch block for 'IOException' will catch both 'FileNotFoundException' and 'EOFException', as well as any other subtype of 'IOException'.
--
Lew