Travailler avec les fichiers et le système de fichiers en Kotlin : du débutant au professionnel

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi travailler avec des fichiers en Kotlin n'est pas douloureux

\n\n

Imaginez : vous écrivez une application qui doit sauvegarder les paramètres utilisateur, journaliser les erreurs ou traiter des fichiers CSV avec des milliers de lignes. En Java, des dizaines de classes BufferedReader, FileWriter et d'innombrables try-catch s'en chargent. Et en Kotlin ? Le langage créé par JetBrains ne se contente pas de « simplifier » Java — il repense la gestion des données. Ici, les fichiers s'ouvrent en une seule ligne, et les erreurs sont traitées avec élégance.

\n\n

Dans cet article, nous allons explorer le travail avec les fichiers et le système de fichiers en Kotlin, des opérations de base aux techniques avancées. Vous apprendrez à lire et écrire des fichiers, gérer des répertoires, travailler avec JSON et CSV, et éviter les erreurs courantes. Prêt ? C'est parti !

\n\n

Les bases : comment Kotlin simplifie la Java IO

\n\n

La principale caractéristique de Kotlin réside dans les fonctions d'extension. Au lieu d'écrire des dizaines de lignes pour lire un fichier, vous utilisez une seule fonction .readText() ou .readLines(). Regardons des exemples concrets.

\n\n

Lecture complète d'un fichier

\n

La façon la plus simple de lire un fichier texte est d'utiliser readText(). Cette méthode retourne une chaîne contenant le contenu du fichier. Important : le fichier se ferme automatiquement après la lecture.

\n\n
import java.io.File\n\nfun main() {\n    val content = File("example.txt").readText()\n    println(content)\n}
\n\n

Si le fichier est volumineux, il est préférable de lire ligne par ligne :

\n\n
val lines = File("example.txt").readLines()\nlines.forEach { line -> println(line) }
\n\n

Et si vous devez lire en flux (par exemple, pour traiter de gros journaux) :

\n\n
File("example.txt").useLines { lines ->\n    lines.forEach { line ->\n        // Traitement de chaque ligne\n        println(line)\n    }\n}
\n\n

Remarquez useLines() — c'est une fonction qui garantit la fermeture de la ressource après la fin du bloc. Cela semble magique, mais fonctionne comme try-with-resources en Java, en plus court.

\n\n

Écriture dans un fichier

\n

L'écriture de données en Kotlin est également intuitive. Voici trois options :

\n\n
// 1. Écraser le fichier\nFile("output.txt").writeText("Bonjour, le monde !")\n\n// 2. Ajouter à la fin du fichier\nFile("output.txt").appendText("Nouvelle ligne\\n")\n\n// 3. Écrire une liste de chaînes\nval list = listOf("ligne1", "ligne2", "ligne3")\nFile("output.txt").writeText(list.joinToString("\\n"))
\n\n

D'ailleurs, si vous travaillez avec des données binaires (images, archives), utilisez writeBytes() et readBytes() :

\n\n
val imageBytes = File("image.png").readBytes()\n// Traitement des octets...\nFile("copy.png").writeBytes(imageBytes)
\n\n

Gestion du système de fichiers : création, suppression, déplacement

\n\n

Kotlin ne réinvente pas la roue, mais rend la gestion du système de fichiers plus pratique. Toutes les opérations sont disponibles via la classe java.io.File avec des extensions.

\n\n

Création de répertoires

\n

Pour créer un répertoire (et tous les répertoires parents s'ils n'existent pas) :

\n\n
val dir = File("data/logs/2024")\nval created = dir.mkdirs() // Retourne true si créé\nprintln("Répertoire créé : $created")
\n\n

Remarque : mkdir() crée uniquement le dernier dossier, tandis que mkdirs() crée toute la chaîne.

\n\n

Vérification d'existence et suppression

\n\n
val file = File("temp.txt")\nif (file.exists()) {\n    if (file.delete()) {\n        println("Fichier supprimé")\n    } else {\n        println("Impossible de supprimer")\n    }\n}\n\n// Suppression récursive d'un répertoire\nFile("data").deleteRecursively()
\n\n

Soyez prudent avec deleteRecursively() — c'est une opération irréversible. Vérifiez deux fois que vous supprimez les bonnes données.

\n\n

Déplacement et copie

\n\n
val source = File("old.txt")\nval target = File("new_dir/new.txt")\n\n// Déplacement (dé                

Blogs

Book Recommendations