Introduction
Travailler avec le système de fichiers est l'une des tâches fondamentales dans tout langage de programmation. En Kotlin, grâce à sa syntaxe concise et aux puissantes extensions de la bibliothèque standard Java, effectuer des opérations sur les fichiers et répertoires devient simple et intuitif.
Dans cet article, nous allons aborder en pratique les opérations de base : création, lecture, écriture, copie, déplacement et suppression de fichiers et dossiers. Tous les exemples sont écrits en Kotlin et prêts à être utilisés dans vos projets. Ce contenu sera utile aussi bien aux débutants qu'aux développeurs expérimentés souhaitant rafraîchir leurs connaissances ou trouver des solutions optimales pour les tâches quotidiennes.
Classes principales et imports
Pour travailler avec le système de fichiers en Kotlin, on utilise les classes des packages java.io (par exemple, File) et java.nio.file (par exemple, Path, Files). Les recommandations modernes privilégient java.nio.file, car cette API est plus performante et plus pratique.
Pour tous les exemples, nous aurons besoin des imports suivants :
import java.io.Fileimport java.nio.file.Pathimport java.nio.file.Pathsimport java.nio.file.Filesimport java.nio.file.StandardCopyOptionimport java.nio.file.StandardOpenOptionCréation d'un fichier et d'un répertoire
Commençons par le plus simple : la création d'un nouveau fichier et d'un dossier.
// Création d'un répertoireval dir = File("my_directory")if (!dir.exists()) { dir.mkdirs() // mkdirs() crée tous les répertoires parents manquants println("Répertoire créé : ${dir.absolutePath}")}
// Création d'un fichierval file = File(dir, "example.txt")if (!file.exists()) { file.createNewFile() println("Fichier créé : ${file.absolutePath}")}Remarque : mkdirs() crée toute la chaîne de répertoires si elle n'existe pas. mkdir() ne crée que le dernier répertoire et retourne false si le dossier parent est absent.
Lecture et écriture de fichiers
Ce sont les opérations les plus courantes. Kotlin propose plusieurs méthodes élégantes pour travailler avec le contenu des fichiers.
Écriture dans un fichier
val path = Paths.get("my_directory/write_example.txt")
// Chaîne à écrireval content = "Bonjour le monde ! Cette ligne est écrite dans le fichier.Deuxième ligne."
// Écriture simple d'une chaîne (écrase le fichier)Files.writeString(path, content)
// Écriture d'une liste de lignesval lines = listOf("Ligne 1", "Ligne 2", "Ligne 3")Files.write(path, lines)
// Ajout à la fin du fichierval additionalContent = "Ligne supplémentaire."Files.writeString(path, additionalContent, StandardOpenOption.APPEND)La méthode Files.writeString() est apparue dans Java 11 et est disponible en Kotlin/JVM. Si vous avez besoin de prendre en charge des versions plus anciennes, utilisez Files.write() en spécifiant l'encodage.
Lecture d'un fichier
val path = Paths.get("my_directory/write_example.txt")
// Lecture de tout le contenu dans une chaîneval fullContent = Files.readString(path)println("Contenu du fichier :$fullContent")
// Lecture dans une liste de lignesval allLines: List<String> = Files.readAllLines(path)allLines.forEachIndexed { index, line -> println("Ligne ${index + 1} : $line")}
// Lecture avec Stream (pour les gros fichiers)Files.lines(path).use { stream -> stream.forEach { line -> println("Traitement de la ligne : $line") }}La construction .use { ... } garantit la fermeture du flux après le traitement, ce qui est particulièrement important pour les gros fichiers.
Copie, déplacement et renommage
Ces opérations sont également réalisées via java.nio.file.Files.
Copie d'un fichier
val source = Paths.get("my_directory/example.txt")val destination = Paths.get("my_directory/backup/example_copy.txt")