• ,

task18.task1824 не пойму, что хочет валидатор!


Файлы и исключения

Читайте с консоли имена файлов.

Если файла не существует (передано неправильное имя файла), то перехватить исключение FileNotFoundException, вывести в консоль переданное неправильное имя файла и завершить работу программы.

Закрыть потоки.

Не используйте System.exit();


вот мой код


package com.javarush.task.task18.task1824;

/* 
Файлы и исключения
*/

import java.io.*;

public class Solution {
    public static void main(String[] args) {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        FileInputStream fileInputStream = null;
        while (true){
            String fileName = null;
            try {
                fileName = bufferedReader.readLine();
                fileInputStream = new FileInputStream(fileName);
            }catch (FileNotFoundException e){
                System.out.println(fileName);
                break;
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            fileInputStream.close();
            bufferedReader.close();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
}


валидатор ругается по двум пунктам:
— Если файл не существует, программа должна перехватывать исключение FileNotFoundException.
— Потоки для чтения из файла должны быть закрыты.

я в упор не вижу ошибку… хэлп ми!

6 комментариев

MrFim
  • MrFim
  • 0
  • Комментарий отредактирован 2017-03-16 22:35:22 пользователем MrFim
Попробуйте закрывать потоки в цикле и пробрасывать IOException дальше, а не обрабатывать его.
vwityaz
и такой вариант тоже не проходит
steelman
Может конечно можно и короче и без такого кол-ва try-cath, но я реши вот так и это приняли:
1. вынеси
String fileName = null;
за цикл.
2. в цикле в блоке try-cach удали
catch (IOException e) {
                e.printStackTrace();
            }
и заключи отдельно твой fileName = bufferedReader.readLine(); в дополнительный блок try-cach c помощью ctrl+alt+T
3. fileInputStream.close() перенеси в конец цикла и заключи также в try-cach.
должно получится что-то типа этого:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String name = null;
        FileInputStream inputStream = null;
        while (true)
        {
            try {
                try {
                    
                } catch (IOException e) {
                    e.printStackTrace();
                }
                
            } catch (FileNotFoundException e) {
                
            }
            try {
                
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            
        } catch (IOException e) {
            e.printStackTrace();
        }
vwityaz
спасибо за участие, но это тоже не помогло
zzzz
  • zzzz
  • 0
  • Комментарий отредактирован 2017-03-20 23:24:17 пользователем zzzz
У вас не закрывается поток чтения в случае возникновения ошибки чтения файла. Два варианта решения — try with resources или же по старинке закрывать поток чтения в блоке finally. Не увидел в условии необходимости в перехвате IOException. Может его и не надо перехватывать, а просто throw-нуть его дальше.
vwityaz
спасибо за помощь! уже «уговорил» валидатор, задача решена.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.