By trapping the more general exception you lose the information about what exactly was wrong. Different actions will be required when you get EOF versus file not found or others. EOF just means no data and file not there means exactly that the file is missing.
If you are writing a program where file not found is expected then IO exception will not tell you if this is what went wrong.
If you are writing a program that requires an empty file then IO excption would not tell you if the file ws empty or missing.
Yes. The more specific exceptions are caught up in IO Exception. This is why in the try and catch blocks you must put the most specific exceptions at the top of the list so they get caught before the more general ones.
You might later in the program check to see which exception thru it originally but it is easier to deal with it at the time it is thrown.