暑期自学 Day 04 | File 类 和 IO 流(四)

IO 异常的处理 (try-catch-finally)

  • 代码示例

    FileWriter fw = null; // 提高 fw 作用域,使 finally 能够使用 fw.
    try {
      fw = new FileWriter("d:\\testfolder\\a.txt");
      fw.write('a');
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      // 如果传递的路径不存在,会抛出空指针异常,所以需要先行判断 fw 是否为 null
      if (fw != null) {
          try {
              fw.close();
              } catch (IOException) {
                  e.printStackTrace();
          }
      }
    }
  • JDK7 开始的新特性

    • try 后面可以加个括号,括号中定义流对象。这样不用写 finally, 流对象使用完后自动释放。
      try (FileWriter fw = new FileWriter("d:\\testfolder\\a.txt")) {
        fw.write('a');
      } catch (IOException e) {
        e.printStackTrace();
      }
  • JDK9 的新特性

    • try 前面定义流对象,try 后面的 () 中可以直接引入流对象名称

    • 由于在 try 前面新建了流对象,我们也需要对流对象中传递的路径进行异常处理: throws FileNotFoundException

      FileWriter fw = new FileWriter("d:\\testfolder\\a.txt");
      FileReader fr = new FileWriter("d:\\testfolder\\b.txt");
      try (fw; fr) {
        fw.write('a');
      } catch (IOException e) {
        e.printStackTrace();
      }

属性集 Propertites

  • 持久属性集,可以保存在流中或在流中加载,是继承了 HashTable 的集合
  • 唯一和IO流相结合的集合
  • 双列集合,因为继承了 HashTable。key, value 都是字符串类型的
  • 特有操作字符串的方法:
    储存获取方法:
    • Object setProperty(String key, String value) 调用 HashTable 方法 put
    • String getProperty(String key) 用指定键在属性列表中搜索属性,相当于 Map.get()
    • Set<String> stringPropertyNames() 返回此属性列表中的键集,相当于 keySet()方法
    与流相关的方法
    • public void store(OutputStream out,String comments)public void store(Writer w,String comments)将集合中的临时数据,持久化写入到硬盘中存储
    • public void load(InputStream in)public void load(Reader r) 将文件中保存的键值对,取出到集合中使用

缓冲流

  • 给流对象创建一个缓冲数组,通过缓冲区读写,减少系统IO次数,从而提高流对象读取效率。
字节缓冲输出输入流
  • public BufferedOutputStream(OutputStream out), public BufferedInputStream(InputStream in)

  • 使用步骤

    • 创建流对象,构造方法中传递文件路径
    • 创建相应的缓冲流对象,构造方法中传递流对象
    • 使用缓冲流对象中的 write() 方法,把数据写入到内部缓冲区
    • 使用缓冲流对象中的 flush() 方法,吧缓冲区数据刷新到文件中
    • 释放资源(如果选择释放资源,flush() 方法可以省略)
  • 注意:

    • 缓冲流构造方法中可以写第二个参数,指定缓冲流内部缓冲区大小。
    • 缓冲流写入时如果不释放或者刷新,缓冲区数据无法写入指定文件。
    • 缓冲流 write(), read() 方法和之前IO流中使用方法一样。如 read() 可以读取字节数组等等……
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!