Напоминаю краткую суть теска. Считать с консоли имя файла, создать стрим с этим файлом, если файл не существует выдать в терминал "Файл не существует." и открыть ещё раз консоль для повторного ввода.
Ввел следующий код:
String sourceFileName;
InputStream fileInputStream = null;
do { // Открываю цикл do-while
try { // Открываю блок в котором нужно отслеживать исключение
sourceFileName = reader.readLine(); // Считываю название файла с консоли
fileInputStream = getInputStream(sourceFileName); // Открываю стрим с файлом
} catch (FileNotFoundException e) { // Так как такого файла нет, ловлю исключение
sourceFileName = null; // Обнуляю переменую sourceFileName
System.err.println("Файл не существует."); // Вывожу в термила фразу, что файла не существует
}
}while(sourceFileName == null); // Так как переменную обнулил в блоке обработке исключений, начинаю цикл заново
Когда я в ввожу в терминал например "er", "rt", "ty", "ап", "пр, "ро", всё работает корректно, но когда ввожу "df", "ап" исключение не генерируется и соответственно не попадаю в блок catch. Вопрос почему так?
package com.javarush.task.task09.task0929;
import java.io.*;
/*
Обогатим код функциональностью!
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String sourceFileName;
InputStream fileInputStream = null;
do {
try {
sourceFileName = reader.readLine();
fileInputStream = getInputStream(sourceFileName);
} catch (IOException e) {
sourceFileName = null;
System.err.println("Файл не существует.");
}
}while(sourceFileName == null);
String destinationFileName = reader.readLine();
OutputStream fileOutputStream = getOutputStream(destinationFileName);
while (fileInputStream.available() > 0) {
int data = fileInputStream.read();
fileOutputStream.write(data);
}
fileInputStream.close();
fileOutputStream.close();
}
public static InputStream getInputStream(String fileName) throws IOException {
return new FileInputStream(fileName);
}
public static OutputStream getOutputStream(String fileName) throws IOException {
return new FileOutputStream(fileName);
}
}