Einleitung
Die Arbeit mit dem Dateisystem ist eine grundlegende Aufgabe in jeder Programmiersprache. In Kotlin werden Datei- und Verzeichnisoperationen dank seiner prägnanten Syntax und den leistungsstarken Erweiterungen der Java-Standardbibliothek einfach und intuitiv.
In diesem Artikel werden wir praktisch die grundlegenden Operationen durchgehen: Erstellen, Lesen, Schreiben, Kopieren, Verschieben und Löschen von Dateien und Ordnern. Alle Beispiele sind in Kotlin geschrieben und können in Ihren Projekten verwendet werden. Das Material ist sowohl für Anfänger als auch für erfahrene Entwickler nützlich, die ihr Wissen auffrischen oder optimale Lösungen für alltägliche Aufgaben finden möchten.
Wichtige Klassen und Importe
Für die Arbeit mit dem Dateisystem in Kotlin werden Klassen aus den Paketen java.io (z. B. File) und java.nio.file (z. B. Path, Files) verwendet. Moderne Empfehlungen bevorzugen java.nio.file, da diese API leistungsfähiger und benutzerfreundlicher ist.
Für alle Beispiele benötigen wir die folgenden Importe:
import java.io.Fileimport java.nio.file.Pathimport java.nio.file.Pathsimport java.nio.file.Filesimport java.nio.file.StandardCopyOptionimport java.nio.file.StandardOpenOptionErstellen einer Datei und eines Verzeichnisses
Beginnen wir mit dem Einfachsten – dem Erstellen einer neuen Datei und eines neuen Ordners.
// Verzeichnis erstellenval dir = File("my_directory")if (!dir.exists()) { dir.mkdirs() // mkdirs() erstellt alle fehlenden übergeordneten Verzeichnisse println("Verzeichnis erstellt: ${dir.absolutePath}")}
// Datei erstellenval file = File(dir, "example.txt")if (!file.exists()) { file.createNewFile() println("Datei erstellt: ${file.absolutePath}")}Beachten Sie: mkdirs() erstellt die gesamte Verzeichniskette, falls sie nicht existiert. mkdir() erstellt nur das letzte Verzeichnis und gibt false zurück, wenn der übergeordnete Ordner fehlt.
Lesen und Schreiben von Dateien
Dies sind die häufigsten Operationen. Kotlin bietet mehrere elegante Möglichkeiten für die Arbeit mit Dateiinhalten.
In eine Datei schreiben
val path = Paths.get("my_directory/write_example.txt")
// Zeichenkette zum Schreibenval content = "Hallo, Welt! Diese Zeile wurde in die Datei geschrieben.Zweite Zeile."
// Einfaches Schreiben einer Zeichenkette (überschreibt die Datei)Files.writeString(path, content)
// Schreiben einer Liste von Zeilenval lines = listOf("Zeile 1", "Zeile 2", "Zeile 3")Files.write(path, lines)
// Anhängen an das Dateiendeval additionalContent = "Zusätzliche Zeile."Files.writeString(path, additionalContent, StandardOpenOption.APPEND)Die Methode Files.writeString() wurde in Java 11 eingeführt und ist in Kotlin/JVM verfügbar. Wenn Sie Unterstützung für ältere Versionen benötigen, verwenden Sie Files.write() mit Angabe der Zeichenkodierung.
Aus einer Datei lesen
val path = Paths.get("my_directory/write_example.txt")
// Gesamten Inhalt als Zeichenkette lesenval fullContent = Files.readString(path)println("Dateiinhalt:$fullContent")
// In eine Liste von Zeilen lesenval allLines: List<String> = Files.readAllLines(path)allLines.forEachIndexed { index, line -> println("Zeile ${index + 1}: $line")}
// Lesen mit Stream (für große Dateien)Files.lines(path).use { stream -> stream.forEach { line -> println("Verarbeite Zeile: $line") }}Die Konstruktion .use { ... } garantiert das Schließen des Streams nach der Verarbeitung, was besonders bei großen Dateien wichtig ist.
Kopieren, Verschieben und Umbenennen
Diese Operationen werden ebenfalls über java.nio.file.Files realisiert.
Datei kopieren
val source = Paths.get("my_directory/example.txt")val destination = Paths.get("my_directory/backup/example_copy.txt")