Membaca dari File di Kotlin

1. Ikhtisar

Dalam tutorial singkat ini, kita akan belajar tentang berbagai cara membaca file di Kotlin.

Kami akan membahas kedua kasus penggunaan membaca seluruh file sebagai String, serta membacanya menjadi daftar baris individual. Juga mendapatkannya dari jalur absolut penuh atau dari resource project.

2. Membaca File

Mari kita buat dulu file input yang akan dibaca oleh Kotlin. Kami membuat file bernama Kotlin.in dan menempatkannya di direktori yang dapat diakses oleh kode kami.

Isi file dapat berupa:

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

Sekarang mari kita lihat berbagai cara untuk membaca file ini. Kita harus meneruskan path lengkap dari file yang dibuat di atas sebagai input untuk metode awal dan path relatif di resource kita untuk dua metode terakhir.

2.1. forEachLine

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

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

2.2. useLines

Memanggil panggilan balik blok tertentu, memberikannya urutan dari semua baris dalam sebuah file.

Setelah pemrosesan selesai, file ditutup:

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

2.3. bufferedReader

Mengembalikan BufferedReader baru untuk membaca konten file.

Setelah kita memiliki BufferedReader , kita dapat membaca semua baris di dalamnya:

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

2.4. readLines

Langsung membaca konten file sebagai daftar baris:

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

Metode ini tidak disarankan digunakan untuk file besar.

2.5. inputStream

Membuat FileInputStream baru untuk file tersebut dan mengembalikannya sebagai hasilnya.

Setelah kita memiliki aliran input, kita dapat mengubahnya menjadi byte, dan kemudian menjadi String lengkap :

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

2.6. readText

Membaca seluruh konten file sebagai String, rangkaian karakter yang ditentukan (defaultnya adalah UTF-8):

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

Metode ini tidak disarankan untuk file besar dan memiliki batasan internal ukuran file 2 GB.

2.7. getResource

Menemukan sumber daya dengan nama yang diberikan dan mengembalikan objek URL :

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

Jika menemukan sumber daya, ia akan mengembalikan URL , yang dapat diproses dengan memanggil metode readText seperti yang ditunjukkan sebelumnya. Jika tidak dapat menemukan sumber daya, ia mengembalikan null . Saat menggunakan getResource , fileName yang diteruskan bukanlah nama file absolut tetapi nama yang terkait dengan resource project kami.

2.8. getResourceAsStream

Menemukan sumber daya dengan nama yang diberikan dan mengembalikan sebuah contoh InputStream :

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

Jika menemukan sumber daya, ia akan mengembalikan InputStream , yang dapat diproses seperti yang ditunjukkan sebelumnya - misalnya, dengan mendapatkan BufferedReader . Jika tidak dapat menemukan sumber daya, ia mengembalikan null . Saat menggunakan getResourceAsStream , fileName yang diteruskan bukanlah nama file absolut tetapi nama yang terkait dengan resource project kami.

3. Kesimpulan

Pada artikel ini, kami melihat berbagai cara membaca file di Kotlin. Bergantung pada kasus penggunaan, kami dapat memilih untuk membaca file baris demi baris atau membacanya seluruhnya sebagai teks. Kami dapat merujuk ke file secara absolut atau menemukannya di antara sumber daya.

Kode sumber untuk artikel ini dapat ditemukan di repo GitHub berikut.