Arbeiten mit Dateien und dem Dateisystem in Kotlin: Vom Anfänger zum Profi

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 Kotlin nicht weh tut

\n\n

Stellen Sie sich vor: Sie schreiben eine Anwendung, die Benutzereinstellungen speichern, Fehler protokollieren oder CSV-Dateien mit Tausenden von Zeilen verarbeiten soll. In Java sind dafür Dutzende Klassen wie BufferedReader, FileWriter und endlose try-catch-Blöcke zuständig. Und in Kotlin? Die von JetBrains entwickelte Sprache „vereinfacht“ Java nicht nur – sie denkt die Arbeit mit Daten neu. Hier werden Dateien mit einer einzigen Zeile geöffnet und Fehler elegant behandelt.

\n\n

In diesem Artikel behandeln wir die Arbeit mit Dateien und dem Dateisystem in Kotlin von grundlegenden Operationen bis hin zu fortgeschrittenen Techniken. Sie erfahren, wie Sie Dateien lesen und schreiben, Verzeichnisse verwalten, mit JSON und CSV arbeiten und typische Fehler vermeiden. Bereit? Los geht's!

\n\n

Grundlagen: Wie Kotlin Java IO vereinfacht

\n\n

Das Hauptmerkmal von Kotlin sind Erweiterungsfunktionen. Anstatt Dutzende Zeilen zum Lesen einer Datei zu schreiben, verwenden Sie eine einzige Funktion wie .readText() oder .readLines(). Schauen wir uns konkrete Beispiele an.

\n\n

Eine gesamte Datei lesen

\n

Der einfachste Weg, eine Textdatei zu lesen, ist die Verwendung von readText(). Diese Methode gibt einen String mit dem Inhalt der Datei zurück. Wichtig: Die Datei wird nach dem Lesen automatisch geschlossen.

\n\n
import java.io.File\n\nfun main() {\n    val content = File("example.txt").readText()\n    println(content)\n}
\n\n

Wenn die Datei groß ist, ist es besser, zeilenweise zu lesen:

\n\n
val lines = File("example.txt").readLines()\nlines.forEach { line -> println(line) }
\n\n

Und wenn Sie als Stream lesen müssen (z. B. zur Verarbeitung großer Logs):

\n\n
File("example.txt").useLines { lines ->\n    lines.forEach { line ->\n        // Verarbeitung jeder Zeile\n        println(line)\n    }\n}
\n\n

Beachten Sie useLines() – dies ist eine Funktion, die das Schließen der Ressource nach Abschluss des Blocks garantiert. Es wirkt magisch, funktioniert aber wie try-with-resources in Java, nur kürzer.

\n\n

In eine Datei schreiben

\n

Das Schreiben von Daten in Kotlin ist ebenfalls intuitiv. Hier sind drei Varianten:

\n\n
// 1. Datei überschreiben\nFile("output.txt").writeText("Hallo, Welt!")\n\n// 2. An das Ende der Datei anhängen\nFile("output.txt").appendText("Neue Zeile\\n")\n\n// 3. Eine Liste von Zeilen schreiben\nval list = listOf("Zeile1", "Zeile2", "Zeile3")\nFile("output.txt").writeText(list.joinToString("\\n"))
\n\n

Übrigens: Wenn Sie mit Binärdaten (Bilder, Archive) arbeiten, verwenden Sie writeBytes() und readBytes():

\n\n
val imageBytes = File("image.png").readBytes()\n// Byte-Verarbeitung...\nFile("copy.png").writeBytes(imageBytes)
\n\n

Dateisystemverwaltung: Erstellen, Löschen, Verschieben

\n\n

Kotlin erfindet das Rad nicht neu, macht aber die Arbeit mit dem Dateisystem komfortabler. Alle Operationen sind über die Klasse java.io.File mit Erweiterungen verfügbar.

\n\n

Verzeichnisse erstellen

\n

Um ein Verzeichnis (und alle übergeordneten, falls nicht vorhanden) zu erstellen:

\n\n
val dir = File("data/logs/2024")\nval created = dir.mkdirs() // Gibt true zurück, wenn erstellt\nprintln("Verzeichnis erstellt: $created")
\n\n

Beachten Sie: mkdir() erstellt nur den letzten Ordner, während mkdirs() die gesamte Kette erstellt.

\n\n

Existenzprüfung und Löschen

\n\n
val file = File("temp.txt")\nif (file.exists()) {\n    if (file.delete()) {\n        println("Datei gelöscht")\n    } else {\n        println("Löschen fehlgeschlagen")\n    }\n}\n\n// Rekursives Löschen eines Verzeichnisses\nFile("data").deleteRecursively()
\n\n

Seien Sie vorsichtig mit deleteRecursively() – dies ist eine irreversible Operation. Überprüfen Sie zweimal, ob Sie die richtigen Daten löschen.

\n\n

Verschieben und Kopieren

\n\n
val source = File("old.txt")\nval target = File("new_dir/new.txt")\n\n// Verschieben (um                

Blogs

Buchempfehlungen