Задача написать класс, который в конструкторе будет принимать имя файла, если файл с расширением .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().
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class TxtReader {
private final String FILE_NAME;
public TxtReader(String fileName) {
this.FILE_NAME=fileName;
}
private boolean checkName() {
try {
return ".txt".equals(FILE_NAME.substring(FILE_NAME.length() - 4));
} catch (NullPointerException | StringIndexOutOfBoundsException e) {
return false;
}
}
public FileInputStream createFileInputStream() throws IOException, UnsupportedFileNameException {
if (checkName()==false) throw new UnsupportedFileNameException();
return new FileInputStream(FILE_NAME);
}
public List <String> loadTxtFile(FileInputStream fileInputStream) throws IOException{
List <String>list = new ArrayList <>();
try (BufferedReader br = new BufferedReader(new InputStreamReader(fileInputStream))) {
String strLine;
while ((strLine = br.readLine()) != null) list.add(strLine);
return list;
}
}
//for testing
public static void main(String[] args) throws IOException {
String fileName = "catalog/file.txt";
TxtReader txtReader = new TxtReader(fileName);
FileInputStream inputStream = txtReader.createFileInputStream();
List<String> loadTxtFile = txtReader.loadTxtFile(inputStream);
for (String s : loadTxtFile) System.out.println(s);
}
}
методом лоад можете даже прочитать построчно и получить соответсвующую коллекцию
Если наследник, то удалите переменную 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
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Наткнулся на решение этой проблемы через Cursor, но насколько я понимаю, его состояние нужно обновлять принудительно, тк
Я пытаюсь написать голосового помощника, и решил для этого использовать yandex speech api, но тут возникла проблема, инструкция по настройке и установки...
Подскажите пожалуйста, как экспортировать таблицу из excel в wordПробовал вот так