ZetCode

Kotlin 读取文件教程

最后修改于 2024 年 1 月 29 日

本文展示了如何在 Kotlin 中读取文件。 我们展示了在 Kotlin 中读取文件的几种方法。

在本文中,我们使用 File 方法读取文件。

本教程提供了五个在 Kotlin 中读取文件的示例。

thermopylae.txt
The Battle of Thermopylae was fought between an alliance of Greek city-states, 
led by King Leonidas of Sparta, and the Persian Empire of Xerxes I over the 
course of three days, during the second Persian invasion of Greece. 

在示例中,我们使用此文本文件。

Kotlin 使用 File.readLines 读取文件

File.readLines 将文件内容作为行列表读取。 不应将其用于大文件。

readfile.kt
package com.zetcode

import java.io.File

fun main() {

    val fileName = "src/resources/thermopylae.txt"
    
    val lines: List<String> = File(fileName).readLines()
    
    lines.forEach { line -> println(line) }
}

该示例使用 File.readLines 读取文件。

Kotlin 使用 File.useLines 读取文件

File.useLines 将所有数据作为行列表读取,并将其提供给回调。 它在最后关闭读取器。

readfile2.kt
package com.zetcode

import java.io.File
 
fun main() {
    
    val fileName = "src/resources/thermopylae.txt"
    
    val myList = mutableListOf<String>()

    File(fileName).useLines { lines -> myList.addAll(lines) }
    
    myList.forEachIndexed { i, line -> println("${i}: " + line) }
}

该示例读取一个文件并将其打印到控制台。 我们向输出添加行号。

val myList = mutableListOf<String>()

创建一个可变列表。

File(fileName).useLines { lines -> myList.addAll(lines) }

使用 File.useLines,我们将行列表复制到上面创建的可变列表中。

myList.forEachIndexed { i, line -> println("${i}: " + line) }

使用 forEachIndexed,我们向每一行添加行号。

Kotlin 使用 File.readText 读取文件

File.readText 将此文件的全部内容作为 String 获取。 不建议对大型文件使用此方法。

readfile3.kt
package com.zetcode

import java.io.File

fun main() {
    
    val fileName = "src/resources/thermopylae.txt"

    val content = File(fileName).readText()
    
    println(content)
}

在示例中,我们将整个文件读入一个字符串并将其打印到控制台。

Kotlin 使用 InputStream 读取文件

InputStream 是一个字节输入流。

readfile4.kt
package com.zetcode

import java.io.File
import java.io.InputStream
import java.nio.charset.Charset

fun main() {

    val fileName = "src/resources/thermopylae.txt"
    val myFile = File(fileName)

    var ins: InputStream = myFile.inputStream()
    
    var content = ins.readBytes().toString(Charset.defaultCharset())
    println(content)
}

该示例从 File 创建一个 InputStream 并从中读取字节。 这些字节被转换为文本。

var ins: InputStream = myFile.inputStream()

使用 inputStreamFile 创建一个 InputStream

var content = ins.readBytes().toString(Charset.defaultCharset())

我们使用 readBytesInputStream 读取字节,并使用 toString 将字节转换为文本。

Kotlin 使用 readBytes 读取文件

readBytes 将文件的全部内容作为字节数组读取。 不建议对大型文件使用它。

readfile5.kt
package com.zetcode

import java.io.File

fun main() {

    val fileName = "src/resources/thermopylae.txt"
    val file = File(fileName)

    var bytes: ByteArray = file.readBytes()
        
    bytes.forEachIndexed { i, byte -> (
                            
        
        if (i == 0) {
                    
            print("${byte} ")
        } else if (i % 10 == 0) {
            
            print("${byte} \n")
        } else {
                
            print("${byte} ")
        })
    }    
}

该示例将文本文件读入字节数组。 它将文件作为数字打印到控制台。

来源

Kotlin 参考文档

在本文中,我们展示了如何在 Kotlin 中读取文件。

作者

我叫 Jan Bodnar,是一位热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出 所有 Kotlin 教程