Dateien in Java: Vom Anfänger zum Profi in 20 Minuten

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum die Arbeit mit Dateien in Java nicht beängstigend ist?

\n\n

Jeder Entwickler, selbst wenn er nur Backend in Java schreibt, steht früher oder später vor der Notwendigkeit, Daten zu speichern, eine Konfiguration zu lesen oder ein Log zu verarbeiten. Die Arbeit mit Dateien und dem Dateisystem in Java ist eine grundlegende Fähigkeit, die „Spielzeug“-Konsolenanwendungen in echte Dienstprogramme verwandelt. Und ja, im Jahr 2024 haben wir nicht nur den guten alten File, sondern auch das leistungsstarke java.nio.file.

\n\n

In diesem Artikel behandeln wir alles: vom Öffnen eines Notizblocks bis zur Manipulation von Zugriffsrechten. Los geht's!

\n\n

1. Der klassische Ansatz: java.io.File

\n\n

Beginnen wir mit dem Urvater. Die Klasse File wurde in Java 1.0 eingeführt und wird immer noch verwendet. Aber seien wir ehrlich: Sie dreht sich mehr um Metadaten als um den Inhalt. Mit ihr kann man überprüfen, ob eine Datei existiert, einen Ordner erstellen oder eine Liste von Dateien abrufen.

\n\n
import java.io.File;\n\npublic class FileExample {\n    public static void main(String[] args) {\n        File file = new File("/home/user/docs/notes.txt");\n        \n        System.out.println("Datei existiert: " + file.exists());\n        System.out.println("Absoluter Pfad: " + file.getAbsolutePath());\n        System.out.println("Größe: " + file.length() + " Bytes");\n        \n        // Verzeichnis erstellen\n        File dir = new File("/home/user/new_folder");\n        if (dir.mkdir()) {\n            System.out.println("Ordner erstellt");\n        }\n    }\n}
\n\n

Nachteil: File kann große Dateien nicht richtig lesen – dafür werden Ströme benötigt. Und es unterstützt keine symbolischen Links (Soft Links) von Haus aus. Deshalb haben Sun (und später Oracle) NIO veröffentlicht.

\n\n

2. Lesen von Dateien: Von InputStream bis BufferedReader

\n\n

Lesen ist die häufigste Operation. Wenn die Datei textbasiert ist, verwenden Sie BufferedReader – er puffert die Daten und arbeitet schnell.

\n\n
import java.io.BufferedReader;\nimport java.io.FileReader;\nimport java.io.IOException;\n\npublic class ReadFile {\n    public static void main(String[] args) {\n        try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {\n            String line;\n            while ((line = br.readLine()) != null) {\n                System.out.println(line);\n            }\n        } catch (IOException e) {\n            System.err.println("Lesefehler: " + e.getMessage());\n        }\n    }\n}
\n\n

Für Binärdateien (Bilder, Archive) verwenden Sie FileInputStream:

\n\n
import java.io.FileInputStream;\nimport java.io.IOException;\n\npublic class ReadBinary {\n    public static void main(String[] args) {\n        try (FileInputStream fis = new FileInputStream("image.png")) {\n            byte[] buffer = new byte[1024];\n            int bytesRead;\n            while ((bytesRead = fis.read(buffer)) != -1) {\n                // verarbeite den Block buffer[0..bytesRead]\n            }\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n    }\n}
\n\n

Wichtig: Verwenden Sie immer try-with-resources – dies garantiert das Schließen des Streams, selbst wenn eine Ausnahme ausgelöst wird.

\n\n

3. Schreiben in Dateien: BufferedWriter und FileOutputStream

\n\n

Schreiben ist fast symmetrisch zum Lesen. Für Text – BufferedWriter, für Binärdaten – FileOutputStream.

\n\n
import java.io.BufferedWriter;\nimport java.io.FileWriter;\nimport java.io.IOException;\n\npublic class WriteFile {\n    public static void main(String[] args) {\n        try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {\n            bw.write("Hallo, Welt!");\n            bw.newLine();\n            bw.write("Java ist mächtig.");\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n    }\n}
\n\n

Wenn Sie an das Ende einer Datei anhängen möchten, anstatt sie zu überschreiben

Blogs

Buchempfehlungen