← Java

Java · 09 / 18

Exceptions und sichere Dateizugriffe

Du behandelst einen Fehler und schließt eine Datei auch bei einem Abbruch.

  • Klein
  • Grundlagen
  • 15 min

Voraussetzungen: Interfaces und Komposition

Eine Exception signalisiert, dass der normale Ablauf nicht fortgesetzt werden konnte. try markiert einen geschützten Ablauf. catch behandelt einen passenden Fehler. Ressourcen wie geöffnete Dateien müssen wieder geschlossen werden. try-with-resources erledigt das zuverlässig, auch wenn während der Verarbeitung ein Fehler entsteht.

Beispieldateien

01Eine sichere Beispieldatei erstellen

Speichere sample.txt mit zwei Namen im Lernordner. Wir lesen nur diese Datei. Path.of beschreibt ihren Pfad. Ein relativer Pfad bezieht sich auf den aktuellen Arbeitsordner, nicht automatisch auf den Ordner der Java-Datei.

sample.txt · textDatei öffnen
Ada
Lin

02Eine Ressource öffnen

Files.newBufferedReader öffnet einen Textleser. UTF_8 legt die Zeichenkodierung fest. Die Ressource steht in den runden Klammern nach try. Java ruft close beim Verlassen dieses Blocks auf. readLine liefert am Dateiende null.

Main.java · javaDatei öffnen
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
public class Main {
  public static void main(String[] args) {
    try (var reader = Files.newBufferedReader(Path.of("sample.txt"), StandardCharsets.UTF_8)) {
      String line;
      while ((line = reader.readLine()) != null) {
        System.out.println(line);
      }
    } catch (IOException error) {
      System.err.println("Cannot read sample: " + error.getMessage());
    }
  }
}

Starten / prüfen

java Main.java

03Den Fehlerweg auslösen

Benenne sample.txt um und starte erneut. IOException wird behandelt. Ein Fehler ist etwas anderes als eine leere Datei. In einer echten Oberfläche sollten diese beiden Fälle unterscheidbare Rückmeldungen erhalten.

Erwartetes Ergebnis

Ada und Lin erscheinen. Ohne Datei erscheint eine Fehlermeldung.

Deine Übung

Zähle die gelesenen Zeilen und gib am Ende die Anzahl aus.

Lösung mit Erklärung anzeigen

Lege innerhalb von try vor der Schleife int count = 0 an, erhöhe ihn für jede Zeile und gib ihn nach der Schleife aus. Bei der Beispieldatei ist das Ergebnis 2. Leere Zeilen zählen dabei ebenfalls als gelesene Zeilen.

Projektbezug und Quellen

Das Beispiel ist zum Lernen vereinfacht. Die verlinkte Codeversion zeigt die Anwendung im Projekt und die dortigen Prüfungen.