W Javie możemy złapać wyjątki pewnego typu:Java zidentyfikować wyjątek właśnie
try{
// Code that does IO like download a file...
}catch(IOException ioe){
ioe.printStackTrace();
// handle ioe
}catch(SomeOtherException soe){
// handle soe
}
Teraz, nie może być wiele przyczyn do wyjątek, w tym przypadku, IOException
może być:
java.io.IOException: Illegal character in path at index.....
od konkretnej bibliotece lub jakiś inny podobny:
java.io.IOException: Stream closed ...
Jeśli coś poszło źle z a Stream
Teraz moje pytanie brzmi: jak ustalić, jaki rodzaj zdarzenia się wydarzył?
Jak mogę odróżnić Stream closed
i Illegal character in path at index...
?
Oczywiście mogę po prostu sprawdzić ciąg komunikatu wyjątku, ale nie sądzę, że jest to najlepszy sposób, ponieważ biblioteka/implementacja może zmienić ciąg wiadomości.
EDIT:
e.getClass()
w tym przypadku zwraca java.io.IOException
prawie wszystko ...
Chyba biblioteka rzuca swoje własne IOException
jednocześnie odrzucając jakąkolwiek oryginalną Exception
.
Wznosiłem cię z powrotem, ponieważ jest to jedyna odpowiedź, która widzi "IOEeception" i wie, że jest to konkretny typ. Nie wiem, dlaczego ktoś miałby cię zająć w pierwszej kolejności ... – tom91136
@HovercraftFullOfEels Metoda 'printStackTrace' zależy od metody' toString'. Implementacja 'Throwable' wypisuje nazwę klasy za pomocą' getClass(). GetName() '. Więc jeśli 'StreamClosedException' nie przesłoni swojego' toString', aby zwrócić nazwę klasy 'IOException', typem konkretnym jest' IOException'. –
@SotiriosDelimanolis: przeprosiny. –