Lezen uit een bestand in Kotlin

1. Overzicht

In deze korte tutorial leren we over de verschillende manieren om een ​​bestand in Kotlin te lezen.

We behandelen beide gevallen van het lezen van het volledige bestand als een Draad, evenals het inlezen in een lijst met individuele regels. Het ook verkrijgen via een volledig absoluut pad of via een projectresource.

2. Een bestand lezen

Laten we eerst een invoerbestand maken dat door Kotlin zal worden gelezen. We maken een bestand met de naam Kotlin.in en plaats het in een map die toegankelijk is via onze code.

De inhoud van het bestand kan zijn:

Hallo tegen Kotlin. Het is: 1. Beknopt 2. Veilig 3. Interoperabel 4. Gereedschapsvriendelijk

Laten we nu eens kijken naar de verschillende manieren waarop we dit bestand kunnen lezen. We moeten het volledige pad van het hierboven gemaakte bestand doorgeven als invoer voor de initiële methoden en het relatieve pad in onze bronnen voor de laatste twee.

2.1. forEachLine

Leest een bestand regel voor regel met behulp van de opgegeven tekenset (standaard is UTF-8) en roept een actie op voor elke regel:

fun readFileLineByLineUsingForEachLine (bestandsnaam: String) = Bestand (bestandsnaam) .forEachLine {println (it)}

2.2. useLines

Roept een gegeven blokoproep aan, waarbij het een reeks van alle regels in een bestand krijgt.

Zodra de verwerking is voltooid, wordt het bestand gesloten:

fun readFileAsLinesUsingUseLines (bestandsnaam: String): List = Bestand (bestandsnaam) .useLines {it.toList ()}

2.3. bufferedReader

Retourneert een nieuw BufferedReader voor het lezen van de inhoud van het bestand.

Zodra we een BufferedReaderkunnen we alle regels erin lezen:

fun readFileAsLinesUsingBufferedReader (bestandsnaam: String): List = Bestand (bestandsnaam) .bufferedReader (). readLines ()

2.4. readLines

Leest direct de inhoud van het bestand als een lijst met regels:

fun readFileAsLinesUsingReadLines (bestandsnaam: String): List = Bestand (bestandsnaam) .readLines ()

Deze methode wordt niet aanbevolen voor gebruik voor grote bestanden.

2.5. inputStream

Bouwt een nieuw FileInputStream voor het bestand en geeft het als resultaat terug.

Zodra we de invoerstroom hebben, kunnen we die omzetten in bytes en vervolgens in een compleet Draad:

fun readFileAsTextUsingInputStream (bestandsnaam: String) = Bestand (bestandsnaam) .inputStream (). readBytes (). toString (Charsets.UTF_8)

2.6. readText

Leest de volledige inhoud van het bestand als een Draad de opgegeven tekenset (standaard is UTF-8):

fun readFileDirectlyAsText (bestandsnaam: String): String = Bestand (bestandsnaam) .readText (Charsets.UTF_8)

Deze methode wordt niet aanbevolen voor grote bestanden en heeft een interne beperking van 2 GB bestandsgrootte.

2.7. getResource

Vindt een bron met de opgegeven naam en retourneert een URL voorwerp:

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

Als het de bron vindt, retourneert het een URL, die kan worden verwerkt door het readText methode zoals eerder getoond. Als het de bron niet kan vinden, keert het terug nul. Tijdens gebruik getResource, de overgegaan in bestandsnaam is geen absolute bestandsnaam, maar een naam die betrekking heeft op onze projectbronnen.

2.8. getResourceAsStream

Vindt een bron met de opgegeven naam en retourneert een InputStream voorbeeld:

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

Als het de bron vindt, retourneert het een InputStream, die kan worden verwerkt zoals eerder getoond, bijvoorbeeld door een BufferedReader. Als het de bron niet kan vinden, keert het terug nul. Tijdens gebruik getResourceAsStream, de overleden bestandsnaam is geen absolute bestandsnaam, maar een naam die betrekking heeft op onze projectbronnen.

3. Conclusie

In dit artikel hebben we de verschillende manieren gezien om een ​​bestand in Kotlin te lezen. Afhankelijk van het gebruik kunnen we ervoor kiezen om het bestand regel voor regel te lezen of het volledig als tekst te lezen. We kunnen op een absolute manier naar het bestand verwijzen of het vinden onder bronnen.

De broncode voor dit artikel is te vinden in de volgende GitHub-opslagplaats.


$config[zx-auto] not found$config[zx-overlay] not found