Læsning fra en fil i Kotlin

1. Oversigt

I denne hurtige vejledning lærer vi om de forskellige måder at læse en fil i Kotlin på.

Vi dækker begge brugstilfælde ved at læse hele filen som en Snor, samt at læse det i en liste over individuelle linjer. Også opnå det fra en fuldstændig absolut sti eller fra en projektressource.

2. Læsning af en fil

Lad os først oprette en inputfil, der læses af Kotlin. Vi opretter en fil, der hedder Kotlin.in og placer det i et bibliotek, som vores kode kan få adgang til.

Filens indhold kan være:

Hej til Kotlin. Det er: 1. kortfattet 2. sikkert 3. interoperabelt 4. værktøjsvenligt

Lad os nu se på de forskellige måder, hvorpå vi kan læse denne fil. Vi skal overføre den fulde sti til den fil, der er oprettet ovenfor, som input til de indledende metoder og den relative sti i vores ressourcer for de sidste to.

2.1. forEachLine

Læser en fil linje for linje ved hjælp af det angivne tegnsæt (standard er UTF-8) og kalder en handling for hver linje:

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

2.2. useLines

Opkald til en given blok-tilbagekaldelse, hvilket giver den en sekvens af alle linjerne i en fil.

Når behandlingen er afsluttet, lukkes filen:

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

2.3. bufferedReader

Returnerer et nyt BufferedReader til læsning af filens indhold.

Når vi har en BufferedReader, kan vi læse alle linjerne i den:

sjov readFileAsLinesUsingBufferedReader (filnavn: streng): Liste = fil (filnavn) .bufferedReader (). readLines ()

2.4. readLines

Læser direkte indholdet af filen som en liste over linjer:

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

Denne metode anbefales ikke at blive brugt til store filer.

2.5. inputStream

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

Når vi har inputstrømmen, kan vi konvertere det til bytes og derefter til en komplet Snor:

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

2.6. readText

Læser hele indholdet af filen som en Snor det angivne tegnsæt (standard er UTF-8):

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

Denne metode anbefales ikke til store filer og har en intern begrænsning på 2 GB filstørrelse.

2.7. getResource

Finder en ressource med det givne navn og returnerer a URL objekt:

sjov readFileUsingGetResource (fileName: String) = dette :: class.java.getResource (fileName) .readText (Charsets.UTF_8)

Hvis den finder ressourcen, returnerer den a URL, som kan behandles ved at kalde readText metode som vist før. Hvis den ikke kan finde ressourcen, vender den tilbage nul. Ved brug getResource, passerede ind filnavn er ikke et absolut filnavn, men et navn i forhold til vores projektressourcer.

2.8. getResourceAsStream

Finder en ressource med det givne navn og returnerer en InputStream eksempel:

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

Hvis den finder ressourcen, returnerer den en InputStream, som kan behandles som vist før - for eksempel ved at få en BufferedReader. Hvis den ikke kan finde ressourcen, vender den tilbage nul. Ved brug getResourceAsStream, passerede ind filnavn er ikke et absolut filnavn, men et navn i forhold til vores projektressourcer.

3. Konklusion

I denne artikel så vi de forskellige måder at læse en fil på i Kotlin. Afhængigt af brugen kan vi enten vælge at læse filen linje for linje eller læse den helt som en tekst. Vi kan henvise til filen på en absolut måde eller finde den blandt ressourcer.

Kildekoden til denne artikel kan findes i følgende GitHub repo.