Membaca dari Fail di Kotlin

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan belajar mengenai pelbagai cara membaca fail di Kotlin.

Kami akan membahas kedua-dua kes penggunaan membaca keseluruhan fail sebagai String, dan juga membacanya ke dalam senarai baris individu. Juga memperolehnya dari jalan mutlak sepenuhnya atau dari sumber projek.

2. Membaca Fail

Mari buat dahulu fail input yang akan dibaca oleh Kotlin. Kami membuat fail bernama Kotlin.in dan meletakkannya di direktori yang dapat diakses oleh kod kami.

Kandungan failnya mungkin:

Hello to Kotlin. It's: 1. Concise 2. Safe 3. Interoperable 4. Tool-friendly

Sekarang mari kita lihat pelbagai cara di mana kita dapat membaca fail ini. Kita harus meneruskan jalan penuh fail yang dibuat di atas sebagai input untuk kaedah awal dan jalan relatif dalam sumber kita untuk dua yang terakhir.

2.1. untukEachLine

Membaca baris fail demi baris menggunakan charset yang ditentukan (lalai adalah UTF-8) dan memanggil tindakan untuk setiap baris:

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

2.2. gunakan Talian

Memanggil panggilan balik blok yang diberikan, memberikan urutan semua baris dalam fail.

Setelah pemprosesan selesai, fail ditutup:

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

2.3. bufferedReader

Mengembalikan BufferedReader baru untuk membaca kandungan fail.

Sebaik sahaja kita mempunyai BufferedReader , kita dapat membaca semua baris di dalamnya:

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

2.4. garis baca

Secara langsung membaca kandungan fail sebagai senarai baris:

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

Kaedah ini tidak digalakkan digunakan untuk fail besar.

2.5. inputStream

Membina FileInputStream baru untuk fail dan mengembalikannya sebagai hasilnya.

Sebaik sahaja kita mempunyai aliran input, kita dapat mengubahnya menjadi bait, dan kemudian menjadi String lengkap :

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

2.6. bacaTeks

Membaca keseluruhan kandungan fail sebagai String charset yang ditentukan (lalai adalah UTF-8):

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

Kaedah ini tidak digalakkan untuk fail besar dan mempunyai batasan dalaman saiz fail 2 GB.

2.7. getResource

Mencari sumber dengan nama yang diberikan dan mengembalikan objek URL :

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

Sekiranya ia menemui sumbernya, ia akan mengembalikan URL , yang dapat diproses memanggil kaedah readText seperti yang ditunjukkan sebelumnya. Sekiranya sumbernya tidak dapat dijumpai, ia akan kembali kosong . Apabila menggunakan getResource , yang diluluskan pada fileName bukanlah nama fail mutlak tetapi nama saudara kepada sumber-sumber projek kami.

2.8. getResourceAsStream

Mencari sumber dengan nama yang diberikan dan mengembalikan contoh InputStream :

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

Sekiranya ia menemui sumbernya, ia akan mengembalikan InputStream , yang dapat diproses seperti yang ditunjukkan sebelumnya - misalnya, dengan mendapatkan BufferedReader . Sekiranya sumbernya tidak dapat dijumpai, ia akan kembali kosong . Apabila menggunakan getResourceAsStream , yang diluluskan pada fileName bukanlah nama fail mutlak tetapi nama saudara kepada sumber-sumber projek kami.

3. Kesimpulannya

Dalam artikel ini, kami melihat pelbagai cara membaca fail di Kotlin. Bergantung pada kes penggunaan, kita boleh memilih untuk membaca fail demi baris atau membacanya sepenuhnya sebagai teks. Kita boleh merujuk fail secara mutlak atau mencarinya di antara sumber.

Kod sumber untuk artikel ini boleh didapati di repo GitHub berikut.