37_io_关闭流

import java.io.{File, FileNotFoundException, FileReader, IOException}

// try-catch-finally 确保流能正常关闭
/*
*   健壮性说明
*      1. 确保在读取文件过程中发生错误(例如IO阻塞)时,能确保 流被关闭
*      2. file为null,不报空指针异常
*
* */
object FileWriterTest extends App {
  var reader: FileReader = _
  try {
    //1. 实例化File类对象,指明要操作的对象
    val file: File = new File("sparkcore1/src/main/data/word.txt")
    println(file.exists())

    //2. 初始化FileReader
    reader = new FileReader(file)

    //3. 读取数据
    // read方法 按指定编码读取一个字符,并返回字符对应的int值,当没有数据时,返回-1
    // 一个字符一个字符的读取
    // 如果这块遇到错误,流将无法关闭,可能造成内存泄漏
    var i = reader.read()
    while (i != -1) {
      print(i.toChar)
      i = reader.read()
      //1/0
    }

  }
  catch {
    case e: IOException => e.printStackTrace()
    case e1: FileNotFoundException => println("未找到文件,请创建")


  } finally {
    //当 file 不存在时,reader为null,会报空指针异常
    //4. 关闭流!!!
    if (reader != null) {
      try {
        println("完成")
        reader.close()
      } catch {
        case e: FileNotFoundException => e.printStackTrace()
      }
    }

  }
}

 

posted @ 2021-11-17 16:07  学而不思则罔!  阅读(53)  评论(0)    收藏  举报