Lesen aus einer Datei in Kotlin

Lesen aus einer Akte in Kotlin

1. Überblick

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 alsString,als auch des Einlesens in eine Liste einzelner Zeilen behandeln. Beziehen Sie 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 mit dem NamenKotlin.in und legen sie in einem Verzeichnis ab, auf das unser Code zugreifen kann.

Der Inhalt der Datei kann 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

Reads a file line by line verwendet die angegebenencharset (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 ein neuesBufferedReader zum Lesen des Inhalts der Datei zurück.

Sobald wir einBufferedReader haben, können wir alle Zeilen darin 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. inputStream

Erstellt ein neuesFileInputStream für die Datei und gibt es als Ergebnis zurück.

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

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 die angegebenencharset (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 das ObjektURLzurück:

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

Wenn die Ressource gefunden wird, wird einURL zurückgegeben, das wie zuvor gezeigt mit der MethodereadText verarbeitet werden kann. Wenn die Ressource nicht gefunden werden kann, wirdnull zurückgegeben. Bei Verwendung vongetResource ist die übergebenefileName kein absoluter Dateiname, sondern ein Name relativ zu unseren Projektressourcen.

2.8. getResourceAsStream

Findet eine Ressource mit dem angegebenen Namen und gibt die Instanz vonInputStreamzurück:

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

Wenn die Ressource gefunden wird, wird einInputStream zurückgegeben, das wie zuvor gezeigt verarbeitet werden kann - beispielsweise durch Abrufen einesBufferedReader. Wenn die Ressource nicht gefunden werden kann, wirdnull zurückgegeben. Bei Verwendung vongetResourceAsStream ist die übergebenefileName 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 absolut auf die Datei verweisen oder sie unter den Ressourcen finden.

Der Quellcode für diesen Artikel befindet sich in den folgendenGitHub repo.