Lesing fra en fil i Kotlin

1. Oversikt

I denne raske opplæringen lærer vi om de forskjellige måtene å lese en fil i Kotlin.

Vi dekker begge bruksområder for å lese hele filen som en Streng, i tillegg til å lese den i en liste over individuelle linjer. Også skaffe det fra en fullstendig bane eller fra en prosjektressurs.

2. Lese en fil

La oss først lage en inndatafil som vil bli lest av Kotlin. Vi oppretter en fil som heter Kotlin.in og plasser den i en katalog som er tilgjengelig med koden vår.

Filens innhold kan være:

Hei til Kotlin. Det er: 1. kortfattet 2. trygt 3. interoperabelt 4. verktøyvennlig

La oss nå se på de forskjellige måtene vi kan lese denne filen på. Vi bør passere hele banen til filen som er opprettet ovenfor som inngang for de første metodene og den relative banen i ressursene våre for de to siste.

2.1. forEachLine

Leser en fil linje for linje bruker det angitte tegnsettet (standard er UTF-8) og kaller en handling for hver linje:

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

2.2. useLines

Ringer en gitt tilbakeringing av blokkeringen, og gir den en sekvens av alle linjene i en fil.

Når behandlingen er fullført, lukkes filen:

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

2.3. bufferedReader

Returnerer en ny BufferedReader for å lese innholdet i filen.

Når vi har en BufferedReader, kan vi lese alle linjene i den:

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

2.4. readLines

Les direkte innholdet i filen som en liste over linjer:

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

Denne metoden anbefales ikke å brukes til store filer.

2.5. inputStream

Konstruerer en ny FileInputStream for filen og returnerer den som et resultat.

Når vi har inngangsstrømmen, kan vi konvertere det til byte, og deretter til en komplett String:

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

2.6. readText

Leser hele innholdet av filen som en String det angitte tegnsettet (standard er UTF-8):

morsom readFileDirectlyAsText (filnavn: streng): streng = fil (filnavn) .lesetekst (tegn.UTF_8)

Denne metoden anbefales ikke for store filer og har en intern begrensning på 2 GB filstørrelse.

2.7. getResource

Finner en ressurs med gitt navn og returnerer a URL gjenstand:

morsom readFileUsingGetResource (filnavn: streng) = dette :: class.java.getResource (filnavn) .readText (Charsets.UTF_8)

Hvis den finner ressursen, vil den returnere a URL, som kan behandles ved å ringe readText metode som vist før. Hvis den ikke finner ressursen, returnerer den null. Når du bruker getResource, passerte inn filnavn er ikke et absolutt filnavn, men et navn i forhold til prosjektressursene våre.

2.8. getResourceAsStream

Finner en ressurs med gitt navn og returnerer en InputStream forekomst:

morsom readFileAsLinesUsingGetResourceAsStream (fileName: String) = dette :: class.java.getResourceAsStream (fileName) .bufferedReader (). readLines ()

Hvis den finner ressursen, vil den returnere en InputStream, som kan behandles som vist før - for eksempel ved å få en BufferedReader. Hvis den ikke finner ressursen, returnerer den null. Når du bruker getResourceAsStream, passerte inn filnavn er ikke et absolutt filnavn, men et navn i forhold til prosjektressursene våre.

3. Konklusjon

I denne artikkelen så vi de forskjellige måtene å lese en fil i Kotlin. Avhengig av brukssaken kan vi enten velge å lese filen linje for linje eller lese den helt som en tekst. Vi kan referere til filen på en absolutt måte eller finne den blant ressurser.

Kildekoden for denne artikkelen finner du i følgende GitHub-repo.