JavaRush /Java блог /Архив info.javarush /Цикл для try-catch
dimaMJ
25 уровень
Craiova

Цикл для try-catch

Статья из группы Архив info.javarush
Программа простая, пользователь вводит имя файла, если такой файл есть то считывается и т.д., если нет то срабатывает исключение и пользователь должен ввести снова имя файла и так до тех пор пока имя файла не будет правильным. Вот код : public class Solution { public static void main(String[] args) throws Exception { InputStream inStream = filego(); OutputStream outStream = new PrintStream(System.out); while(inStream.available()>0) { int data = inStream.read(); outStream.write(data); } inStream.close(); outStream.close(); } public static InputStream filego() throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String FileName = reader.readLine(); InputStream inStream = null ; try { inStream = new FileInputStream(FileName); } catch (Exception e) { System.out.println("Файл не найден, введите еще раз"); filego(); } return inStream; } } При запуске программы, когда ввожу не правильное имя все работает, когда ввожу правильное выдает Exception in thread "main" java.lang.NullPointerException то есть возвращает почему то null, что я не так делаю, может глаза запотели или что то не понимаю, подскажите пожалуйста ) Очень хочу разобраться, как правильно сделать цикл для try-catch. Пробовал без отдельного метода, просто через while,тоже ничего хорошего не вышло )
И правильно ли я указал тип возвращаемого значения ?
Комментарии (7)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
dimaMJ Уровень 25
27 августа 2014
с рекурсией еще не очень знаком) спасибо за ответы, разобрался)
Ruzveld Уровень 34
26 августа 2014
Не думаю, что рекурсия для такой задачи — правильный выбор. К тому же, результат рекурсивного вызова filego() у тебя просто игнорируется, соответственно, если в первой попытке вылетело исключение, то в любом случае в main вернется null.
dimaMJ Уровень 25
26 августа 2014
никто не поможет ?)