Lire un fichier depuis les ressources en Kotlin : guide complet avec exemples

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

Comment lire un fichier texte depuis le dossier resources en Kotlin : tutoriel pas à pas

\n\n

Salut, ami ! Si tu as déjà programmé en Kotlin pour Android ou simplement créé une application console, tu as sûrement rencontré une tâche simple mais piégeuse : comment lire un fichier texte qui se trouve dans le dossier resources ? Cela semble simple, non ? Mais si tu regardes sur Stack Overflow, la question "How to read a text file from resources in Kotlin?" cumule des milliers de vues. Le problème est donc bien réel.

\n\n

Dans cet article, nous allons voir 5 méthodes fiables pour y parvenir. Tu découvriras la différence entre javaClass et ClassLoader, comment éviter un NullPointerException et que faire si ton projet est une bibliothèque plutôt qu'une application. C'est parti !

\n\n

1. Préparation : où placer le fichier ?

\n

Avant de lire, il faut placer le fichier au bon endroit. Dans un projet Kotlin standard (Gradle, Maven), le dossier des ressources se trouve généralement ici :

\n\n
src/main/resources/
\n\n

Pour les tests — src/test/resources/. Si tu as un projet Android, les ressources sont placées dans src/main/res/raw/ (mais avec sa propre logique, nous y reviendrons). Nous allons nous concentrer sur le Kotlin/JVM pur.

\n\n

Créons un fichier simple data.txt avec le contenu suivant :

\n
Bonjour le monde !\nCe sont des lignes provenant des ressources.\nKotlin déchire.
\n\n

Parfait, l'outil est prêt. Voyons maintenant comment l'ouvrir.

\n\n

2. Méthode n°1 : La classique via javaClass

\n

La méthode la plus populaire et intuitive consiste à utiliser javaClass (l'équivalent Kotlin de getClass() en Java).

\n\n
import java.io.File\n\nfun readFromResources(fileName: String): String {\n    val inputStream = this::class.java.classLoader?.getResourceAsStream(fileName)\n        ?: throw IllegalArgumentException("Fichier $fileName introuvable dans les ressources")\n    return inputStream.bufferedReader().readText()\n}
\n\n

Analyse détaillée :

\n
    \n
  • this::class.java — obtient la classe Java de l'objet courant.
  • \n
  • .classLoader — récupère le ClassLoader (chargeur de classes).
  • \n
  • getResourceAsStream(fileName) — ouvre le flux.
  • \n
  • L'opérateur Elvis ?: lève une exception si le fichier n'existe pas.
  • \n
\n\n

Appel :

\n
fun main() {\n    val content = readFromResources("data.txt")\n    println(content)\n}
\n\n

En sortie, nous verrons les trois lignes de notre fichier. Simple et élégant.

\n\n

3. Méthode n°2 : Utiliser un object pour les utilitaires

\n

Si tu écris une classe utilitaire, il est pratique de placer la logique dans un object (singleton). En Kotlin, cela se fait ainsi :

\n\n
object ResourceReader {\n    fun readText(fileName: String): String {\n        val stream = ResourceReader::class.java.classLoader\n            .getResourceAsStream(fileName)\n            ?: throw FileNotFoundException("Ressource $fileName introuvable")\n        return stream.bufferedReader().readText()\n    }\n}\n\n// Utilisation :\nfun main() {\n    val text = ResourceReader.readText("config.json")\n    println(text)\n}
\n\n

Remarque : nous utilisons ResourceReader::class.java — cela fonctionne car un object est un singleton qui possède une classe.

\n\n

4. Méthode n°3 : Lire en tant qu'URL (pour obtenir le chemin)

\n

Parfois, on a besoin non pas du contenu, mais du chemin vers le fichier (par exemple, pour le passer à une autre bibliothèque). On utilise alors getResource() :

\n\n
fun getResourcePath(fileName: String): String {\n    val url = this::class.java.classLoader.getResource(fileName)\n        ?: throw RuntimeException("Ressource $fileName introuvable")\n    return url.path\n}
\n\n

Mais attention : si le projet est empaqueté dans un JAR, url.path peut pointer à l'intérieur de l'archive, et File ne pourra pas le lire. Dans ce cas, il est préférable de toujours utiliser un flux (

Blogs

Book Recommendations