Почему я получаю необработанное исключение типа IOException?

У меня есть следующий простой код:

import java.io.*;
class IO {
    public static void main(String[] args) {    
       BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));    
       String userInput;    
       while ((userInput = stdIn.readLine()) != null) {
          System.out.println(userInput);
       }
    }
}

И я получаю следующее сообщение об ошибке:

----------
1. ERROR in io.java (at line 10)
    while ((userInput = stdIn.readLine()) != null) {
                        ^^^^^^^^^^^^^^^^
Unhandled exception type IOException
----------
1 problem (1 error)roman@roman-laptop:~/work/java$ mcedit io.java 

У кого-нибудь есть идеи, почему? Я просто попытался упростить код, представленный на веб-сайте суммы (здесь ). Я упростил?


person Roman    schedule 21.02.2010    source источник


Ответы (6)


Вы должны добавить «выбрасывает IOException» к вашему основному методу:

public static void main(String[] args) throws IOException {

Вы можете прочитать немного больше о проверенных исключениях (специфичных для Java) в JLS.

person Marcin    schedule 21.02.2010

В Java есть функция, называемая «проверенные исключения». Это означает, что существуют определенные виды исключений, а именно те, которые являются подклассами Exception, но не RuntimeException, так что если метод может их генерировать, он должен перечислить их в своем объявлении throws, например: void readData() бросает IOException. IOException является одним из них.

Таким образом, когда вы вызываете метод, который перечисляет IOException в своем объявлении throws, вы должны либо указать его в своем собственном объявлении throws, либо перехватить его.

Обоснование наличия проверяемых исключений заключается в том, что для некоторых видов исключений нельзя игнорировать тот факт, что они могут произойти, потому что их появление — это вполне штатная ситуация, а не ошибка программы. Итак, компилятор помогает вам не забывать о возможности возникновения такого исключения и требует от вас как-то его обрабатывать.

Однако не все проверенные классы исключений в стандартной библиотеке Java подходят под это обоснование, но это совершенно другая тема.

person jkff    schedule 21.02.2010

Попробуйте еще раз с этим фрагментом кода:

import java.io.*;

class IO {
    public static void main(String[] args) {    
        try {
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));    
            String userInput;    
            while ((userInput = stdIn.readLine()) != null) {
                System.out.println(userInput);
            }
        } catch(IOException ie) {
            ie.printStackTrace();
        }   
    }
}

Использование try-catch-finally лучше, чем использование throws. Поиск ошибок и отладка становятся проще при использовании try-catch-finally.

person Parth    schedule 21.02.2010

Чтение ввода с клавиатуры аналогично загрузке файлов из Интернета, система java io открывает соединения с источником данных для чтения с помощью InputStream или Reader, вы должны обрабатывать ситуацию, когда соединение может разорвать с помощью IOExceptions

Если вы хотите точно знать, что значит работать с InputStreams и BufferedReader, это видео показывает это

person vivz    schedule 21.01.2013

добавьте «выбрасывает IOException» к вашему методу следующим образом:

public static void main(String args[]) throws  IOException{

        FileReader reader=new FileReader("db.properties");

        Properties p=new Properties();
        p.load(reader);


    }
person harun ugur    schedule 07.02.2018

Я получил ошибку, хотя ловил исключение.

    try {
        bitmap = BitmapFactory.decodeStream(getAssets().open("kitten.jpg"));
    } catch (IOException e) {
        Log.e("blabla", "Error", e);
        finish();
    }

Проблема заключалась в том, что IOException не был импортирован

import java.io.IOException;
person KoKlA    schedule 26.02.2021