FileNotFoundException in Java

FileNotFoundException in Java

1. Einführung

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

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 Pfadnamendoesnot ist vorhanden

  • Eine Datei mit dem angegebenen Pfadnamendoes existiert aus irgendeinem Grundbutis inaccessible (angefordertes Schreiben für eine schreibgeschützte Datei oder Berechtigungen erlauben keinen Zugriff auf die Datei)

3. Wie gehe ich damit um?

Unter Berücksichtigung der Tatsache, dassjava.io.IOException erweitert wird, diejava.lang.Exception erweitert, müssen Sie zunächst mit einemtry-catch-Block wie mit allen anderen überprüften Exception umgehen.

Was dann innerhalb destry-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 bei der Ausführung 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. Es reicht also aus, nur eine Benachrichtigung zu erhalten

  • Erstellen Sie eine Datei: Lesen Sie eine optionale Konfigurationsdatei, finden Sie sie nicht und erstellen Sie eine neue 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 Pfad

  • 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. Fazit

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

Wie immer sind die vollständigen Beispieleover on Github.