Baza Wiedzy

IOException

Opis🔗

IOException jest wyjątkiem z grupy wyjątków osbługiwanych (checked exceptions), co oznacza, że dziedziczy bezpośredno po klasie Exception i mamy obowiązek jego obsługi, gdy jakaś metoda deklaruje go w swojej sygnaturze.

Wyjątek znajduje się w pakiecie java.io, więc pełna ścieżka do niego wygląda następująco java.io.IOException.

Wyjątek ten jest bardzo ogólny i może być wygenerowany w wielu różnych sytuacjach. Najpopularniejsze to np.:

    • nieudana próba odczytu lub zapisu do pliku związana np. z brakiem odpowiednich praw dostępu

    • próba odczytywania danych z internetu, gdy w międzyczasie utraciliśmy połączenie

    • próba odczytu danych z zamkniętego strumienia

    Kurs Java

    Obsługa wyjątku w bloku try-catch🔗

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class IoExceptionTest {
    
        public static void main(String[] args) {
            BufferedReader br = null;
            try {
                br = new BufferedReader(new FileReader(new File("plik.txt")));
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            }
            
            try {
                br.readLine();
            } catch (IOException e) {
                System.out.println("Błąd odczytu pliku");
            }
        }
    
    }

    Utworzyliśmy BufferedReader, który pozwala nam odczytywać dane z pliku o nazwie plik.txt. W przypadku, gdy plik taki istnieje, ale próba wczytania z niego wiersza tekstu poprzez metodę readLine() się nie powiedzie np. z powodu braku dostępu do pliku, wygenerowany zostanie wyjątek IOException, który przechwytujemy w bloku catch i wyświetlamy komunikat "Błąd odczytu pliku".

     

    Obsługa wyjątku poprzez propagację instrukcją throws.🔗

    Jeżeli nie jesteśmy w stanie w sensowny sposób obsłużyć wyjątku IOException (np. informując o nim użytkownika), to zamiast pozostawiać pusty blok catch lepiej przekazać go wyżej deklarując w metodzie odpowiedni nagłówek throws.

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class IoExceptionTest {
    
        public static void main(String[] args) throws IOException  {
            BufferedReader br = new BufferedReader(new FileReader(new File("plik.txt")));
            br.readLine();
        }
    
    }

    Ponieważ wyjątek FileNotFoundException dziedziczy po IOException, to deklarując wyjątek IOException w naglówku metody obsługujemy jednocześnie oba z nich.

    Najlepszy newsletter o Javie w Polsce

    Czy chcesz otrzymywać nowości ze świata Javy oraz przykładowe pytania rekrutacyjne? Zapisz się na newsletter i bądź na bieżąco! Otrzymasz także ekskluzywne materiały oraz informacje o nowych kursach i promocjach.

    Nikomu nie udostępniamy Twojego maila, a jeśli zechcesz to w każdej chwili możesz się wypisać.

    Komentarze do artykułu

    Wyłączyliśmy możliwość dodawania komentarzy. Poniżej znajdziesz archiwalne wpisy z czasów gdy strona była jeszcze hobbystycznym blogiem. Zapraszamy natomiast do zadawnia pytań i dyskusji na naszej grupe na facebooku.