Страницы

Поиск по вопросам

среда, 17 июля 2019 г.

Наследник для FileInputStream Java

Задача написать класс, который в конструкторе будет принимать имя файла, если файл с расширением .txt, то создавать объект FileInputStream, если нет - выбрасывать исключение. Я попытался в самом начале сделать проверку на расширение, если txt, то вызывать конструктор суперкласса, ежели нет, то выбрасывать исключение, но ide ругается, что я обязательно должен вызвать конструктор суперкласса первой же строчкой.
public class TxtInputStream extends FileInputStream { FileInputStream fileInputStream;
public TxtInputStream(String fileName) throws FileNotFoundException, UnsupportedFileNameException, IOException { String [] fileNameArray = fileName.split(" "); if (fileNameArray[fileNameArray.length].equals("txt")) this.fileInputStream = new FileInputStream(fileName); else { throw new UnsupportedFileNameException(); super.close(); } }
public static void main(String[] args) { }
}
UPD добавлю требования к задаче:
1. Класс TxtInputStream должен наследоваться от класса FileInputStream
2. Если в конструктор передан txt-файл, TxtInputStream должен вести себя, как обычный FileInputStream.
3. Если в конструктор передан не txt-файл, должно быть выброшено исключение UnsupportedFileNameException.
4. В случае выброшенного исключения, так же должен быть вызван super.close().


Ответ

Если наследник, то удалите переменную FileInputStream fileInputStream;
и конструктор будет выглядеть так:
public TxtInputStream(String fileName) throws FileNotFoundException, UnsupportedFileNameException, IOException { super(fileName); if(!fileName.endsWith("txt")){ throw new UnsupportedFileNameException(); } }

Если надо сделать как обертку:
тогда удаляем наследование и оставляем переменную FileInputStream fileInputStream;, только делаем её приватной.
тогда конструктор выглядит так:
public TxtInputStream(String fileName) throws FileNotFoundException, UnsupportedFileNameException, IOException { if(fileName.endsWith("txt")) fileInputStream = new FileInputStream(fileName); else{ throw new UnsupportedFileNameException(); } }
но в этом случае необходимо создать нужные вам методы и перенаправить их в объект fileInputStream

Комментариев нет:

Отправить комментарий