Introduction au travail avec le système de fichiers en Kotlin
Le travail avec le système de fichiers est l'une des tâches fondamentales que tout développeur rencontre. Que vous écriviez une application console, un service web ou une application mobile Android, savoir lire, écrire et gérer des fichiers est une compétence essentielle. Dans cet article, nous allons détailler comment travailler avec le système de fichiers en Kotlin, en utilisant à la fois les outils standards de Java et les fonctionnalités modernes du langage.
Kotlin est un langage de programmation moderne, concis et sûr, entièrement compatible avec Java. Cela signifie que vous pouvez utiliser toutes les fonctionnalités de java.io et java.nio.file, tout en écrivant un code beaucoup plus court et plus expressif. Cet article est destiné aux développeurs débutants qui connaissent déjà les bases de la syntaxe Kotlin.
Classes et méthodes principales pour travailler avec les fichiers
Avant de passer à la pratique, découvrons les classes clés nécessaires pour travailler avec le système de fichiers en Kotlin :
java.io.File— la classe principale pour représenter les fichiers et les répertoires.java.nio.file.Path— une interface moderne pour travailler avec les chemins.java.nio.file.Files— une classe utilitaire avec de nombreuses méthodes statiques.java.io.BufferedReaderetjava.io.BufferedWriter— pour la lecture et l'écriture ligne par ligne.
Kotlin propose également ses propres extensions pratiques pour la classe File, qui rendent le code encore plus simple. Par exemple, les fonctions readText(), writeText(), appendText() et d'autres.
Création de fichiers et de répertoires
Commençons par le plus simple : la création d'un fichier. En Kotlin, cela se fait en une seule ligne :
import java.io.File
fun main() { val file = File("example.txt") file.createNewFile() // crée le fichier s'il n'existe pas println("Fichier créé : ${file.absolutePath}")}Notez que createNewFile() retourne un Boolean — true si le fichier a été créé, et false s'il existe déjà. Pour créer des répertoires, on utilise la méthode mkdir() ou mkdirs() (créant tous les dossiers parents manquants) :
fun main() { val dir = File("myFolder/subFolder") if (dir.mkdirs()) { println("Répertoire créé : ${dir.absolutePath}") } else { println("Impossible de créer le répertoire") }}Lecture des données d'un fichier
Il existe plusieurs façons de lire un fichier en Kotlin. Examinons les plus courantes.
Lecture complète du fichier
Si le fichier est petit, il est pratique de lire son contenu en une seule chaîne ou une liste de lignes :
fun main() { val file = File("readme.txt") // Lecture de tout le texte en une seule chaîne val text: String = file.readText() println("Contenu du fichier :$text") // Lecture ligne par ligne val lines: List<String> = file.readLines() lines.forEach { println("Ligne : $it") }}La méthode readText() retourne une chaîne, et readLines() retourne une liste de lignes. Les deux méthodes ferment automatiquement le fichier après la lecture, ce qui est sûr et pratique.
Lecture ligne par ligne avec mise en mémoire tampon
Pour les gros fichiers, il est préférable d'utiliser BufferedReader afin de ne pas charger tout le fichier en mémoire :
fun main() { val file = File("large_file.txt") file.bufferedReader().use { reader -> var line: String? while (reader.readLine().also { line = it } != null) { println("Lecture : $line") } }}La construction .use { } garantit que la ressource sera fermée après l'exécution du bloc, même en cas d'exception.