15.3 文件 IO 操作
Kotlin为java.io.File提供了大量好用的扩展函数,这些扩展函数主要在下面三个源文件中:
- kotlin/io/files/FileTreeWalk.kt
- kotlin/io/files/Utils.kt
- kotlin/io/FileReadWrite.kt
同时,Kotlin 也针对InputStream、OutputStream和 Reader 等都做了简单的扩展。它们主要在下面的两个源文件中:
- kotlin/io/IOStreams.kt
- kotlin/io/ReadWrite.kt
Koltin 的序列化直接采用的 Java 的序列化类的类型别名:
internal typealias Serializable = java.io.Serializable
下面我们来简单介绍一下 Kotlin 文件读写操作。
15.3.1 读文件
读取文件全部内容
我们如果简单读取一个文件,可以使用readText()方法,它直接返回整个文件内容。代码示例如下
/**
* 获取文件全部内容字符串
* @param filename
*/
fun getFileContent(filename: String): String {
val f = File(filename)
return f.readText(Charset.forName("UTF-8"))
}
我们直接使用 File 对象来调用 readText 函数即可获得该文件的全部内容,它返回一个字符串。如果指定字符编码,可以通过传入参数Charset来指定,默认是UTF-8编码。
如果我们想要获得文件每行的内容,可以简单通过split("\n")
来获得一个每行内容的数组。
获取文件每行的内容
我们也可以直接调用 Kotlin 封装好的readLines函数,获得文件每行的内容。readLines函数返回一个持有每行内容的 List。
/**
* 获取文件每一行内容,存入一个 List 中
* @param filename
*/
fun getFileLines(filename: String): List<String> {
return File(filename).readLines(Charset.forName("UTF-8"))
}
直接操作字节数组
我们如果希望直接操作文件的字节数组,可以使用readBytes()。如果想使用传统的Java方式,在Kotlin 中你也可以像 Groovy 一样自如使用。
//读取为bytes数组
val bytes: ByteArray = f.readBytes()
println(bytes.joinToString(separator = " "))
//直接像 Java 中的那样处理Reader或InputStream
val reader: Reader = f.reader()
val inputStream: InputStream = f.inputStream()
val bufferedReader: BufferedReader = f.bufferedReader()
15.3.2 写文件
和读文件类似,写入文件也很简单。我们可以写入字符串,也可以写入字节流。还可以直接使用Java的 Writer 或者 OutputStream。
覆盖写文件
fun writeFile(text: String, destFile: String) {
val f = File(destFile)
if (!f.exists()) {
f.createNewFile()
}
f.writeText(text, Charset.defaultCharset())
}
末尾追加写文件
fun appendFile(text: String, destFile: String) {
val f = File(destFile)
if (!f.exists()) {
f.createNewFile()
}
f.appendText(text, Charset.defaultCharset())
}
当前内容版权归 JackChan1999 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 JackChan1999 .