IOException выбрасывается для гораздо большего, чем просто доступ к файлам. Вы можете создать подкласс IOException и выбросить его, если хотите, и можете прикрепить произвольные поля к подклассу исключения. Оттуда вам, вероятно, придется перехватывать IOException и перебрасывать их как IOExceptionWithFileInformation, где это уместно.