Если вы посмотрите на определение FileNotFoundException
, вы увидите, что это
public class FileNotFoundException extends IOException {
Итак, перехватывая базовый класс IOException
, вы, по сути, уже перехватываете производное исключение, следовательно, ошибка, которую вы видите.
Однако, если вы еще раз посмотрите на вызываемый конструктор FileReader
, он выдает только FileNotFoundException
, поэтому вам действительно не нужно ловить IOException
, и вы можете удалить это catch и исправьте вашу ошибку.