public static Collection<File> getAllFilesThatMatchFilenameExtension(String directory_name, String matching_filename) {
File directory = new File(directory_name);
return FileUtils.listFiles(directory, new WildcardFileFilter(matching_filename), null);
}
diese löst bei einem nicht existierenden Verzeichnis eine IllegalArgumentException aus. Diese Funktion wird über über mehrere Funktionen hinweg aufgerufen. Hier Schematisch dargestellt:
Code:
public static Collection<File> getAllFilesThatMatchFilenameExtension(String directory_name, String matching_filename) {
File directory = new File(directory_name);
return FileUtils.listFiles(directory, new WildcardFileFilter(matching_filename), null);
}
Collection<File> function a(String base_dir) {
String directory_name = base_dir + .....
.....
return getAllFilesThatMatchFilenameExtension(directory_name, matching_filename)
}
Collection<File> function b() {
String base_dir;
....
return a(base_dir);
}
Wann und an welchen Stellen wird eigentlich "... throws Exception" benutzt, die in der nachfolgenden, schematischen Funktion benutzt wird?
Es gibt checked und unchecked Exceptions. Erstere müssen vom Entwickler behandelt werden (try-catch), letztere nicht. In der Methodendeklaration werden deshalb checked Exceptions per throws deklariert.
Generell schreibt man `throws EinCheckedExceptionTyp` an eine Methode, wenn die Methode selbst nicht in der Lage ist, die Exception sinnvoll zu behandeln und der Aufrufer hier mehr "Kontext"-informationen hätte, um die Exception behandeln zu können.
In Java gibt es grob zwei Arten von Exceptions: Checked und Unchecked. Checked Exceptions sind solche, die behandelt werden müssen oder per `throws DerCheckedExceptionTyp` an den Aufrufer weitergegeben werden. Unchecked Exceptions sind solche wie etwa IllegalArgumentException oder auch NullPointerException. Die Unterscheidung zwischen checked und unchecked Exceptions rührt daher, dass checked Exceptions (wie etwa java.io.IOException) generell Fehler sind, die durch die Umgebung ausgelöst werden können (Socket kaputt, Datei nicht vorhanden, ...) und solche können meist sinnvoll behandelt werden (z.B. retry). Unchecked Exceptions hingegen sind meist Programmierfehler/Bugs und können potenziell immer auftreten und sollten nicht explizit behandelt werden z.B. per try {...} catch (NullPointerException e) {} überall im Code. Solche Fehler werden meist ganz weit oben querschnittlich behandelt.