Почему он запрашивает окружение объекта BufferReader с помощью try catch, когда у меня это уже есть? - PullRequest
0 голосов
/ 12 декабря 2018

Я пишу программу, в которой я беру ввод от пользователя, используя объект BufferedReader, а затем перехватываю исключение IOException, выдаваемое объектом BufferedReader в блоке catch, но все же, когда я закрываю ресурсы в блоке finally, почему он говорит окружитьпопробуйте / поймайте или объявите IOException

Вот программа

public class BufferedReader3 {


    public static void main(String[] args){
        // TODO Auto-generated method stub

        InputStreamReader  r=null;
        BufferedReader br=null;
        String name="";    





        try 
        {

            r =new InputStreamReader(System.in);    
            br =new BufferedReader(r); 
            while(!name.equals("stop"))
            {    

                System.out.println("Enter data: ");   
                name=br.readLine();
            } 



            System.out.println("data is: "+name);    


        }              
        catch (IOException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch (Exception e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

        finally
        {

            br.close();    
            r.close();    
        }
    }

}

1 Ответ

0 голосов
/ 12 декабря 2018

Метод close может выдать IOException по следующей причине (источник) :

Если возникает ошибка ввода-вывода

Именно поэтому IOException, который может генерировать метод close, также необходимо перехватить, поскольку он находится в блоке finally, он не находится внутри уже существующего блока try catch:

finally {
    try {
        br.close();
        r.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...