FileReader.close may throw an IOException. If this occurs then lnReader is never closed. Note that you don't need to explicitly close both of the readers. Closing the LineNumberReader closes its backing Reader as well. Try this:
The LineNumberReader constructor throws no exceptions, so if the FileReader is created then the LineNumberReader is created as well. Except when this call is interrupted by another thread calling System.exit, or an Error (e.g. OutOfMemoryError) being thrown.