Плиз, растолкуйте, задача 1814:
UnsupportedFileName
Измени класс TxtInputStream так, чтобы он работал только с txt-файлами (*.txt).
Например, first.txt или name.1.part3.txt.
Если передан не txt-файл, например, file.txt.exe, то конструктор должен выбрасывать исключение UnsupportedFileNameException.
Подумай, что еще нужно сделать, в случае выброшенного исключения.
public class TxtInputStream extends FileInputStream {
public TxtInputStream(String fileName) throws IOException, UnsupportedFileNameException {
super(fileName);
if (!fileName.endsWith(".txt")){
super.close();
throw new UnsupportedFileNameException();
}
}
public static void main(String[] args) {
}
}
1. Мы сначала полюбак создаём новый FileInputStream, и лишь потом проверяем, годится он нам или нет. Хотя было бы логично, сначала проанализировать fileName, и если нам подходит, то только тогда создать FileInputStream. Ява не позволяет ссылку к конструктору вышестоящего класса воткнуть в иф ( if(filename.endsWith(".txt")) super(fileName); ). Можно ли это обойти, или просто расслабится на эту тему?
2. Немного не догнал с закрытием потока. Метод close() - он не статический. Почему мы его вызываем не применительно к объекту ( this.close(); ) а через ссылку на вышестоящий класс ( super.close() ). Как оно узнает, какой именно поток нам надо закрыть? Где я туплю?