Arbeiten mit dem Dateisystem in Kotlin: Von der Theorie zur Praxis
\n\nDie Arbeit mit dem Dateisystem ist eine der grundlegenden Aufgaben, mit denen jeder Entwickler konfrontiert wird. In Kotlin wird die Verwaltung von Dateien und Verzeichnissen dank seiner engen Integration mit Java und den eigenen praktischen Erweiterungen intuitiv und prägnant. In diesem Artikel behandeln wir die wichtigsten Operationen: Erstellen, Lesen, Schreiben und Löschen von Dateien sowie die Arbeit mit Verzeichnissen. Alle Beispiele sind in Kotlin geschrieben und können in Ihren Projekten verwendet werden.
\n\nGrundlagen: Einbindung und erste Schritte
\n\nKotlin hat keine eigene separate Bibliothek für die Arbeit mit dem Dateisystem – es nutzt vollständig die Leistungsfähigkeit von java.io.File und fügt zahlreiche Erweiterungsfunktionen hinzu. Das bedeutet, dass Sie die vertrauten Java-Methoden verwenden können, jedoch mit einer kürzeren und sichereren Syntax.
import java.io.File\n\nfun main() {\n val file = File("example.txt")\n println(file.exists()) // false, wenn die Datei nicht existiert\n}\n\nDie Hauptklasse ist java.io.File. Sie stellt eine Abstraktion eines Pfads zu einer Datei oder einem Verzeichnis dar, der nicht unbedingt auf der Festplatte existieren muss.
Lesen und Schreiben von Dateien in Kotlin
\n\nKotlin bietet elegante Möglichkeiten zum Lesen und Schreiben, die die manuelle Verwaltung von Streams und das Schließen von Ressourcen überflüssig machen.
\n\nLesen des gesamten Dateiinhalts
\n\nDer einfachste Weg ist die Verwendung der Funktion readText(). Sie liest die gesamte Datei in einen einzigen String.
fun readEntireFile() {\n val file = File("data.txt")\n if (file.exists()) {\n val content: String = file.readText()\n println(content)\n } else {\n println("Datei nicht gefunden")\n }\n}\n\nWenn die Datei groß ist, ist es besser, zeilenweise zu lesen:
\n\nfun readLines() {\n File("log.txt").useLines { lines ->\n lines.forEach { line ->\n println(line)\n }\n }\n // useLines schließt den Stream automatisch\n}\n\nIn eine Datei schreiben
\n\nZum Schreiben verwenden Sie writeText() (überschreibt die Datei) oder appendText() (hängt an das Ende an).
fun writeToFile() {\n val file = File("output.txt")\n file.writeText("Hallo, Kotlin!\\n")\n file.appendText("Dies ist die zweite Zeile.")\n \n println(file.readText())\n // Ausgabe:\n // Hallo, Kotlin!\n // Dies ist die zweite Zeile.\n}\n\nFür komplexere Daten (z. B. das Schreiben einer Liste von Zeilen) ist die Verwendung von writeLines() praktisch:
fun writeListOfLines() {\n val lines = listOf("Zeile 1", "Zeile 2", "Zeile 3")\n File("list.txt").writeLines(lines)\n}\n\nErstellen, Kopieren und Löschen von Dateien und Verzeichnissen
\n\nDie Verwaltung der Dateistruktur ist eine weitere häufige Aufgabe. Betrachten wir die wichtigsten Operationen.
\n\nErstellen von Dateien und Ordnern
\n\nDie Methode createNewFile() erstellt eine neue leere Datei, falls sie noch nicht existiert. Zum Erstellen von Verzeichnissen verwenden Sie mkdir() (erstellt nur den letzten Ordner im Pfad) oder mkdirs() (erstellt alle fehlenden übergeordneten Verzeichnisse).
fun createStructure() {\n val dir = File("my_project/src/main")\n if (dir.mkdirs()) {\n println("Verzeichnis erstellt: ${dir.absolutePath}")\n }\n \n val newFile = File(dir, "config.ini")\n if (newFile.createNewFile()) {\n println("Datei erstellt: ${newFile.name}")\n }\n}\n\nKopieren und Verschieben
\n\nGibt es in Kotlin keine eingebaute Funktion copyTo? Doch, die gibt es! Die Methode copyTo() ermöglicht das einfache Kopieren von Dateien, und renameTo() dient zum Umbenennen oder Verschieben.
fun copyAndMove() {\n val source = File("source.txt")\n val destination = File("backup/source_copy.txt")\n \n // Kopieren\n source.copyTo(destination, overwrite = true)\n \n // Vers