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 @   学而不思则罔!  阅读(49)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示