Olvasson egy fájlból Kotlinban

1. Áttekintés

Ebben a gyors bemutatóban megismerhetjük a fájlok Kotlinban történő olvasásának különféle módjait.

Mindkét felhasználási esetet lefedjük, amikor a teljes fájlt a-ként olvassuk Húr, valamint felolvassa az egyes sorok listájára. Szintén teljes abszolút elérési útból vagy egy projekt erőforrásból szerezheti be.

2. Fájl olvasása

Először hozzunk létre egy bemeneti fájlt, amelyet Kotlin fog olvasni. Létrehozunk egy nevű fájlt Kotlin.in és helyezze el egy könyvtárba, amelyhez kódunk férhet hozzá.

A fájl tartalma a következő lehet:

Üdv Kotlinnak. Ez: 1. tömör 2. biztonságos 3. interoperábilis 4. eszközbarát

Most nézzük meg a fájl különféle módjait. Át kell adnunk a fent létrehozott fájl teljes elérési útját, mint a kezdeti módszerek bemenetét, és az erőforrások relatív elérési útját az utóbbi kettő számára.

2.1. forEachLine

Fájlokat olvas fel soronként a megadott karakterkészletet használva (alapértelmezés szerint UTF-8), és műveletet hív minden sorhoz:

fun readFileLineByLineUsingForEachLine (fileName: String) = Fájl (fileName) .forEachLine {println (it)}

2.2. useLines

Meghív egy adott blokk visszahívást, megadva a fájl összes sorának sorrendjét.

A feldolgozás befejezése után a fájl bezáródik:

fun readFileAsLinesUsingUseLines (fájlnév: String): Lista = Fájl (fájlNév) .useLines {it.toList ()}

2.3. bufferedReader

Új értéket ad vissza BufferedReader a fájl tartalmának elolvasására.

Miután megvan a BufferedReader, elolvashatjuk az összes sort benne:

fun readFileAsLinesUsingBufferedReader (fájlnév: String): Lista = Fájl (fájlnév) .bufferedReader (). readLines ()

2.4. readLines

Közvetlenül felolvassa a fájl tartalmát sorok listájaként:

fun readFileAsLinesUsingReadLines (fájlnév: String): Lista = Fájl (fájlNév) .readLines ()

Ez a módszer nem ajánlott hatalmas fájlokhoz.

2.5. inputStream

Újat épít FileInputStream a fájlhoz, és ennek eredményeként adja vissza.

Miután megvan a bemeneti adatfolyam, átalakíthatjuk ezt bájtokká, majd teljesé Húr:

fun readFileAsTextUsingInputStream (fileName: String) = Fájl (fileName) .inputStream (). readBytes (). toString (Charsets.UTF_8)

2.6. readText

A fájl teljes tartalmát a-ként olvassa fel Húr a megadott karakterkészlet (alapértelmezés szerint UTF-8):

fun readFileDirectlyAsText (fileName: String): String = Fájl (fileName) .readText (Charsets.UTF_8)

Ez a módszer nem ajánlott hatalmas fájlokhoz, és belső korlátozása 2 GB méretű.

2.7. getResource

Megkeresi a megadott névvel rendelkező erőforrást és visszaadja a URL tárgy:

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

Ha megtalálja az erőforrást, akkor a URL, amely feldolgozható a readText módszer a korábban bemutatott módon. Ha nem találja az erőforrást, akkor visszatér nulla. Használat során getResource, a bejáratott fájl név nem egy abszolút fájlnév, hanem egy név a projekt erőforrásainkhoz képest.

2.8. getResourceAsStream

Megkeresi a megadott névvel rendelkező erőforrást, és egy InputStream példa:

fun readFileAsLinesUsingGetResourceAsStream (fájlnév: String) = ez: class.java.getResourceAsStream (fájlnév) .bufferedReader (). readLines ()

Ha megtalálja az erőforrást, akkor egy InputStream, amely a korábban bemutatott módon feldolgozható - például a BufferedReader. Ha nem találja az erőforrást, akkor visszatér nulla. Használat során getResourceAsStream, a bejáratott fájl név nem egy abszolút fájlnév, hanem egy név a projekt erőforrásainkhoz képest.

3. Következtetés

Ebben a cikkben láttuk a fájlolvasás különféle módjait Kotlinban. A felhasználási esettől függően választhatjuk, hogy a fájlt soronként olvassuk-e, vagy pedig teljesen szövegként. Abszolút módon hivatkozhatunk a fájlra, vagy megtalálhatjuk az erőforrások között.

A cikk forráskódja a következő GitHub repóban található.