FileNotFoundException in Java

1. Einleitung

In diesem Artikel werden wir über eine sehr häufige Ausnahme in Java sprechen - die FileNotFoundException .

Wir werden die Fälle behandeln, in denen es auftreten kann, mögliche Behandlungsmethoden und einige Beispiele.

2. Wann wird die Ausnahme ausgelöst?

Wie in der Java-API-Dokumentation angegeben, kann diese Ausnahme ausgelöst werden, wenn:

  • Eine Datei mit dem angegebenen Pfad nicht nicht existieren
  • Eine Datei mit dem angegebenen Pfad tut exist aber unzugänglich ist aus irgendeinem Grunde (für eine schreibgeschützte Datei angefordert Schreiben oder Berechtigungen nicht erlauben , Zugriff auf die Datei)

3. Wie gehe ich damit um?

Unter Berücksichtigung der Tatsache , dass es java.io.IOException erweitert, die java.lang.Exception erweitert , müssen Sie es zunächst mit einem Try-Catch- Block wie mit jeder anderen überprüften Ausnahme behandeln .

Was dann innerhalb des Try-Catch- Blocks zu tun ist (geschäftlich / logisch), hängt tatsächlich davon ab, was Sie tun müssen.

Möglicherweise müssen Sie:

  • Auslösen einer geschäftsspezifischen Ausnahme: Dies kann ein Fehler beim Stoppen der Ausführung sein, aber Sie lassen die Entscheidung in den oberen Ebenen der Anwendung (vergessen Sie nicht, die ursprüngliche Ausnahme einzuschließen).
  • Benachrichtigen Sie einen Benutzer mit einem Dialog oder einer Fehlermeldung: Dies ist kein Stop-Execution-Fehler, daher reicht es aus, nur eine Benachrichtigung zu erhalten
  • Erstellen einer Datei: Lesen einer optionalen Konfigurationsdatei, Nichtfinden und Erstellen einer neuen Datei mit Standardwerten
  • Erstellen Sie eine Datei in einem anderen Pfad: Sie müssen etwas schreiben, und wenn der erste Pfad nicht verfügbar ist, versuchen Sie es mit einem ausfallsicheren
  • Protokollieren Sie einfach einen Fehler: Dieser Fehler sollte die Ausführung nicht stoppen, sondern Sie protokollieren ihn für zukünftige Analysen

4. Beispiele

Jetzt sehen wir einige Beispiele, die alle auf der folgenden Testklasse basieren:

public class FileNotFoundExceptionTest { private static final Logger LOG = Logger.getLogger(FileNotFoundExceptionTest.class); private String fileName = Double.toString(Math.random()); protected void readFailingFile() throws IOException { BufferedReader rd = new BufferedReader(new FileReader(new File(fileName))); rd.readLine(); // no need to close file } class BusinessException extends RuntimeException { public BusinessException(String string, FileNotFoundException ex) { super(string, ex); } } }

4.1. Ausnahme protokollieren

Wenn Sie den folgenden Code ausführen, wird der Fehler in der Konsole "protokolliert":

@Test public void logError() throws IOException { try { readFailingFile(); } catch (FileNotFoundException ex) { LOG.error("Optional file " + fileName + " was not found.", ex); } }

4.2. Auslösen einer geschäftsspezifischen Ausnahme

Als nächstes ein Beispiel für das Auslösen einer geschäftsspezifischen Ausnahme, damit der Fehler in den oberen Ebenen behandelt werden kann:

@Test(expected = BusinessException.class) public void raiseBusinessSpecificException() throws IOException { try { readFailingFile(); } catch (FileNotFoundException ex) { throw new BusinessException( "BusinessException: necessary file was not present.", ex); } }

4.3. Eine Datei erstellen

Schließlich werden wir versuchen, die Datei so zu erstellen, dass sie gelesen werden kann (möglicherweise für einen Thread, der kontinuierlich eine Datei liest), aber erneut die Ausnahme abfangen und den möglichen zweiten Fehler behandeln:

@Test public void createFile() throws IOException { try { readFailingFile(); } catch (FileNotFoundException ex) { try { new File(fileName).createNewFile(); readFailingFile(); } catch (IOException ioe) { throw new RuntimeException( "BusinessException: even creation is not possible.", ioe); } } }

5. Schlussfolgerung

In dieser kurzen Beschreibung haben wir gesehen, wann eine FileNotFoundException auftreten kann, und verschiedene Optionen, um damit umzugehen .

Wie immer sind die vollständigen Beispiele auf Github vorbei.