Лабораторная работа №13. Исключения
В этом задании мы напишем программу, которая построчно читает текстовый файл и сложным образом его обрабатывает. При этом основная цель состоит в использовании в процессе обработки собственных классов исключений. При определении нового класса исключения всякий раз думайте, от чего его наследовать: от класса Exception или от другого собственного исключения, содержащего необходимые поля.
Часть 1 (2 балла)
Дан файл, каждая строка которого имеет следующий формат:
прописная_латинская_буква список_вещественных_чисел
, где элементы списка чисел разделяются пробелами. Реализуйте классLimitedStringLoader
, предназначенный для загрузки файла в список строк. Класс должен иметь конструктор с двумя строковыми параметрамиprohibited
иerroneous
и целочисленным параметромproLimit
, инициализирующими соответствующие поля. В случае, если символы в параметрахprohibited
иerroneus
конструктораLimitedStringLoader
имеют непустое перечение, должно генерироваться исключение InconsistentLimits, содержащее информацию о символах в пересечении.Добавьте в класс поле для списка строк типа
List<String>
(со свойством на чтение) и методLoad(filename:string)
, выполняющий загрузку списка и его сохранение в поле. Если файл отсутствует, должно генерироваться исключениеFileNotFoundException
. Загрузка должна выполняться в соответствии с ограничениями: если строка начинается с буквы, содержащейся в строкеprohibited
, то строка пропускается, если с буквы, содержащейся в строкеerroneous
, — то генерируется исключениеWrongStartingSymbol
, содержащее номер строки файла, в которой произошла ошибка, и её первый символ. Если строка начинается не с прописной латинской буквы, то генерируется исключениеIncorrectString
, содержащее номер строки файла. Если количество пропущенных строк превышает значение параметра конструктораproLimit
, то чтение файла завершается с генерацией исключенияTooManyProhibitedLines
. В случае генерации любого исключения список должен считаться незагруженным (даже частично).Если пользователь пытается обратиться к загруженному списку (через свойство) до вызова метода
Load
, то должно генерироваться исключениеDataNotLoaded
.
Часть 2 (1 балл)
- Реализуйте в основной программе следующую логику:
- Пользователь вводит ограничения для загрузки. Если они некорректные, то программа завершается с выводом соответствующего сообщения.
- Пользователь вводит имя файла.
- Выполняется загрузка строк.
- Пользователю выводится количество загруженных строк.
- Организуйте обработку исключений по следующим принципам:
- Ошибки, связанные с отсутствием файла, должны приводить к запросу у пользователя имени файла и повторной попытке загрузки строк.
- Ошибки, связанные с некорректным содержимым файла, должны приводить к завершению программы с выводом соответствующего сообщения и рекомендацией пользователю по исправлению файла.
- Все остальные ошибки должны приводить к завершению работы программы с выводом соответствующего сообщения.