If you're going to catch an exception, you have to actually handle it or else rethrow it. Just catching it doesn't make the problem go away.
Here you try to initialize reader, and if that fails, you just keep plugging along as if everything were fine, when it clearly isn't--reader is null, meaning when you call reader.readNext() you'll get NPE.
This is why you should not generally initialize local variables to dummy values at declaration just to make the compiler happy. If you didn't initialize reader to null, then this code wouldn't even have compiled, because reader might not have been initialized, which would have been a red flag to you to reexamine your logic, at which point you would have seen that you were trying to continue on using reader after failing to initialize it, which would in turn have led you to just not catch the exception. In general, don't initialize locals at declaration unless you plan to actually use that value.
Also, all close() and similar "clean-up" calls should be in a finally block. (Although, just FYI, one common approach to doing that will lead you to having no choice but to initialize certain variables to null, in apparent contradiction to what I just said above.)