Lesen aus einer Datei in Kotlin

1. Übersicht

In diesem kurzen Tutorial lernen wir die verschiedenen Möglichkeiten zum Lesen einer Datei in Kotlin kennen.

Wir werden sowohl Anwendungsfälle des Lesens der gesamten Datei als Zeichenfolge als auch des Einlesens in eine Liste einzelner Zeilen behandeln. Sie erhalten es auch von einem vollständigen absoluten Pfad oder von einer Projektressource.

2. Eine Datei lesen

Erstellen wir zunächst eine Eingabedatei, die von Kotlin gelesen wird. Wir erstellen eine Datei namens Kotlin.in und legen sie in einem Verzeichnis ab, auf das unser Code zugreifen kann.

Der Inhalt der Datei könnte sein:

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

Schauen wir uns nun die verschiedenen Möglichkeiten an, wie wir diese Datei lesen können. Wir sollten den vollständigen Pfad der oben erstellten Datei als Eingabe für die anfänglichen Methoden und den relativen Pfad in unseren Ressourcen für die letzten beiden übergeben.

2.1. forEachLine

Liest eine Datei zeilenweise mit dem angegebenen Zeichensatz (Standard ist UTF-8) und ruft für jede Zeile eine Aktion auf:

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

2.2. useLines

Ruft einen bestimmten Blockrückruf auf und gibt ihm eine Folge aller Zeilen in einer Datei.

Sobald die Verarbeitung abgeschlossen ist, wird die Datei geschlossen:

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

2.3. bufferedReader

Gibt einen neuen BufferedReader zum Lesen des Inhalts der Datei zurück.

Sobald wir einen BufferedReader haben , können wir alle darin enthaltenen Zeilen lesen:

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

2.4. readLines

Liest den Inhalt der Datei direkt als Liste von Zeilen:

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

Diese Methode wird nicht für große Dateien empfohlen.

2.5. Eingabestrom

Erstellt einen neuen FileInputStream für die Datei und gibt ihn als Ergebnis zurück.

Sobald wir den Eingabestream haben, können wir diesen in Bytes und dann in einen vollständigen String konvertieren :

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

2.6. Text lesen

Liest den gesamten Inhalt der Datei als Zeichenfolge des angegebenen Zeichensatzes (Standard ist UTF-8):

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

Diese Methode wird für große Dateien nicht empfohlen und ist intern auf 2 GB beschränkt.

2.7. getResource

Findet eine Ressource mit dem angegebenen Namen und gibt ein URL- Objekt zurück:

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

Wenn die Ressource gefunden wird, wird eine URL zurückgegeben , die wie zuvor gezeigt mit der Methode readText verarbeitet werden kann . Wenn die Ressource nicht gefunden werden kann, wird null zurückgegeben . Bei Verwendung von getResource ist der übergebene Dateiname kein absoluter Dateiname, sondern ein Name relativ zu unseren Projektressourcen.

2.8. getResourceAsStream

Findet eine Ressource mit dem angegebenen Namen und gibt eine InputStream- Instanz zurück:

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

Wenn die Ressource gefunden wird, wird ein InputStream zurückgegeben , der wie zuvor gezeigt verarbeitet werden kann - beispielsweise durch Abrufen eines BufferedReader . Wenn die Ressource nicht gefunden werden kann, wird null zurückgegeben . Bei Verwendung von getResourceAsStream ist der übergebene Dateiname kein absoluter Dateiname, sondern ein Name relativ zu unseren Projektressourcen.

3. Fazit

In diesem Artikel haben wir die verschiedenen Möglichkeiten zum Lesen einer Datei in Kotlin gesehen. Je nach Anwendungsfall können wir die Datei entweder zeilenweise oder vollständig als Text lesen. Wir können auf die Datei absolut verweisen oder sie unter Ressourcen finden.

Den Quellcode für diesen Artikel finden Sie im folgenden GitHub-Repo.