IOException
Spis treści
Opis
IOException jest wyjątkiem z grupy wyjątków obsł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
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.
Dyskusja i komentarze
Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.