Einführung in die Arbeit mit dem Dateisystem in Kotlin
Die Arbeit mit dem Dateisystem ist eine der grundlegenden Aufgaben, auf die jeder Entwickler stößt. Unabhängig davon, ob Sie eine Konsolenanwendung, einen Webdienst oder eine mobile App für Android schreiben, ist die Fähigkeit, Dateien zu lesen, zu schreiben und zu verwalten, eine unverzichtbare Fähigkeit. In diesem Artikel werden wir im Detail besprechen, wie man mit dem Dateisystem in Kotlin arbeitet, wobei sowohl die Standard-Java-Methoden als auch die modernen Sprachfunktionen verwendet werden.
Kotlin ist eine moderne, prägnante und sichere Programmiersprache, die vollständig mit Java kompatibel ist. Das bedeutet, dass Sie alle Möglichkeiten von java.io und java.nio.file nutzen können, dabei aber viel kürzeren und ausdrucksstärkeren Code schreiben. Der Artikel richtet sich an Anfänger, die bereits mit den Grundlagen der Kotlin-Syntax vertraut sind.
Wichtige Klassen und Methoden für die Dateiarbeit
Bevor wir zur Praxis übergehen, lernen wir die wichtigsten Klassen kennen, die für die Arbeit mit dem Dateisystem in Kotlin benötigt werden:
java.io.File– die Hauptklasse zur Darstellung von Dateien und Verzeichnissen.java.nio.file.Path– ein modernes Interface für die Arbeit mit Pfaden.java.nio.file.Files– eine Utility-Klasse mit vielen statischen Methoden.java.io.BufferedReaderundjava.io.BufferedWriter– für zeilenweises Lesen und Schreiben.
Kotlin bietet auch eigene praktische Erweiterungen für die Klasse File, die den Code noch einfacher machen. Zum Beispiel die Funktionen readText(), writeText(), appendText() und andere.
Erstellen von Dateien und Verzeichnissen
Beginnen wir mit dem Einfachsten – dem Erstellen einer Datei. In Kotlin geht das in einer Zeile:
import java.io.File
fun main() { val file = File("example.txt") file.createNewFile() // erstellt die Datei, falls sie nicht existiert println("Datei erstellt: ${file.absolutePath}")}Beachten Sie: createNewFile() gibt einen Boolean zurück – true, wenn die Datei erstellt wurde, und false, wenn sie bereits existiert. Zum Erstellen von Verzeichnissen wird die Methode mkdir() oder mkdirs() verwendet (letztere erstellt alle fehlenden übergeordneten Ordner):
fun main() { val dir = File("myFolder/subFolder") if (dir.mkdirs()) { println("Verzeichnis erstellt: ${dir.absolutePath}") } else { println("Verzeichnis konnte nicht erstellt werden") }}Lesen von Daten aus einer Datei
Es gibt mehrere Möglichkeiten, eine Datei in Kotlin zu lesen. Betrachten wir die gängigsten.
Komplette Datei auf einmal lesen
Wenn die Datei klein ist, ist es praktisch, ihren Inhalt in einen String oder eine Liste von Strings zu lesen:
fun main() { val file = File("readme.txt") // Gesamten Text in einen String lesen val text: String = file.readText() println("Dateiinhalt:$text") // Zeilenweise lesen val lines: List<String> = file.readLines() lines.forEach { println("Zeile: $it") }}Die Methode readText() gibt einen String zurück, readLines() eine Liste von Strings. Beide Methoden schließen die Datei nach dem Lesen automatisch, was sicher und bequem ist.
Zeilenweises Lesen mit Pufferung
Für große Dateien ist es besser, BufferedReader zu verwenden, um nicht die gesamte Datei in den Speicher zu laden:
fun main() { val file = File("large_file.txt") file.bufferedReader().use { reader -> var line: String? while (reader.readLine().also { line = it } != null) { println("Lesen: $line") } }}Die Konstruktion .use { } stellt sicher, dass die Ressource nach Beendigung des Blocks geschlossen wird, selbst wenn eine Ausnahme auftritt.