Kotlin I/O 与文件管理(3)字符流

  • Reader 抽象类
  • Writer 抽象类
  • 案例:文件复制

  想掌握字符流的API,首先要熟悉它的两个抽象类:ReaderWriter,并了解它们有哪些主要的函数。

一、Reader 抽象类

  Reader 是字符输入流的根类,影响着字符输入流的行为,Kotlin 为 Reader 类定义了很多扩展函数和属性,下面是一些主要的扩展函数。
  (1). 返回字符缓冲区输入流:

fun Reader.buffered(
    bufferSize: Int = DEFAULT_BUFFER_SIZE // 缓冲区大小
): BufferedReader

  (2). 从输入流中复制数据到输出流,返回复制的字符数:

fun Reader.copyTo(
    out: Writer, 
    bufferSize: Int = DEFAULT_BUFFER_SIZE
): Long

  (3). 遍历输入流中的每一行数据,对每一行数据进行处理,完成之后关闭流:

fun Reader.forEachLine(action: (String) -> Unit)

  (4). 读取输入流中的数据到一个 List 集合,每一个行数据是一个元素,完成之后关闭流:

fun Reader.readLines(): List

  (5). 读取输入流中的数据到字符串中:

fun Reader.readText(): String

二、Writer 抽象类

  Writer 是字符输出流的根类,影响着字符输出流的行为,Kotlin 为 Writer 类定义了一个扩展函数 bufferedbuffered 函数返回字符缓冲区输出流,其定义如下:

fun Writer.buffered(
    bufferSize: Int = DEFAULT_BUFFER_SIZE
): BufferedWriter

三、案例:文件复制

  实现文件复制,数据源是文件,所以用到文件输入流 FileReader,数据目的地也是文件,所以用到了文件输出流 FileWriter

  FileReaderFileWriter 都属于底层流,在实际开发时为了提高效率可以使用缓冲流 BufferedReaderBufferredWriter

fun main(args: Array?) {
    FileReader("./TestDir/index.html").use { fileReader ->
        FileWriter("./TestDir/subDir/index.html").use { fileWriter ->
            val bufferInput = fileReader.buffered()
            val bufferOutput = fileWriter.buffered()
            bufferInput.copyTo(bufferOutput)
        }
    }
}

你可能感兴趣的:(Kotlin I/O 与文件管理(3)字符流)