Lecture d’un fichier dans Kotlin

Lecture d'un fichier en Kotlin

1. Vue d'ensemble

Dans ce rapide didacticiel, nous allons découvrir les différentes manières de lire un fichier dans Kotlin.

Nous couvrirons les deux cas d'utilisation de la lecture du fichier entier en tant queString, et de sa lecture dans une liste de lignes individuelles. L'obtention également à partir d'un chemin absolu complet ou d'une ressource de projet.

2. Lecture d'un fichier

Créons d'abord un fichier d'entrée qui sera lu par Kotlin. Nous créons un fichier appeléKotlin.in et le plaçons dans un répertoire accessible par notre code.

Le contenu du fichier peut être:

Hello to Kotlin. It's:
1. Concise
2. Safe
3. Interoperable
4. Tool-friendly

Voyons maintenant les différentes manières dont nous pouvons lire ce fichier. Nous devons passer le chemin complet du fichier créé ci-dessus comme entrée pour les méthodes initiales et le chemin relatif dans nos ressources pour les deux dernières.

2.1. forEachLine

Reads a file line by line en utilisant lecharset spécifié (la valeur par défaut est UTF-8) et appelle une action pour chaque ligne:

fun readFileLineByLineUsingForEachLine(fileName: String)
  = File(fileName).forEachLine { println(it) }

2.2. useLines

Appelle un rappel de bloc donné, en lui donnant une séquence de toutes les lignes d'un fichier.

Une fois le traitement terminé, le fichier est fermé:

fun readFileAsLinesUsingUseLines(fileName: String): List
  = File(fileName).useLines { it.toList() }

2.3. bufferedReader

Renvoie un nouveauBufferedReader pour lire le contenu du fichier.

Une fois que nous avons unBufferedReader, nous pouvons lire toutes les lignes qu'il contient:

fun readFileAsLinesUsingBufferedReader(fileName: String): List
  = File(fileName).bufferedReader().readLines()

2.4. readLines

Lit directement le contenu du fichier sous forme de liste de lignes:

fun readFileAsLinesUsingReadLines(fileName: String): List
  = File(fileName).readLines()

Cette méthode n'est pas recommandée pour les fichiers volumineux.

2.5. inputStream

Construit un nouveauFileInputStream pour le fichier et le renvoie en conséquence.

Une fois que nous avons le flux d'entrée, nous pouvons le convertir en octets, puis en unString complet:

fun readFileAsTextUsingInputStream(fileName: String)
  = File(fileName).inputStream().readBytes().toString(Charsets.UTF_8)

2.6. readText

Reads the entire content of the file as a String lescharset spécifiés (la valeur par défaut est UTF-8):

fun readFileDirectlyAsText(fileName: String): String
  = File(fileName).readText(Charsets.UTF_8)

Cette méthode n'est pas recommandée pour les fichiers volumineux et a une limite interne de taille de fichier de 2 Go.

2.7. getResource

Recherche une ressource avec le nom donné et renvoie un objetURL:

fun readFileUsingGetResource(fileName: String)
  = this::class.java.getResource(fileName).readText(Charsets.UTF_8)

S'il trouve la ressource, il renverra unURL, qui peut être traité en appelant la méthodereadText comme indiqué précédemment. S'il ne trouve pas la ressource, il renvoienull. Lors de l'utilisation degetResource, lefileName passé n'est pas un nom de fichier absolu mais un nom relatif aux ressources de notre projet.

2.8. getResourceAsStream

Recherche une ressource avec le nom donné et renvoie une instanceInputStream:

fun readFileAsLinesUsingGetResourceAsStream(fileName: String)
  = this::class.java.getResourceAsStream(fileName).bufferedReader().readLines()

S'il trouve la ressource, il renverra unInputStream, qui peut être traité comme indiqué précédemment - par exemple, en obtenant unBufferedReader. S'il ne trouve pas la ressource, il renvoienull. Lors de l'utilisation degetResourceAsStream, lefileName passé n'est pas un nom de fichier absolu mais un nom relatif aux ressources de notre projet.

3. Conclusion

Dans cet article, nous avons vu les différentes manières de lire un fichier dans Kotlin. Selon le cas d'utilisation, nous pouvons choisir de lire le fichier ligne par ligne ou de le lire entièrement sous forme de texte. Nous pouvons faire référence au fichier de manière absolue ou le trouver parmi les ressources.

Le code source de cet article se trouve dans lesGitHub repo suivants.