1.前言

try-catch常规的格式是try{……}catch(){……}finallly{……},如果优化成try(……){……}catch(){……}finallly{……},此时流就可以自动关闭,不需要手动去关闭。

2.样例分析

try-catch优化前,代码如下:

try {
  FileOutputStream fos = new FileOutputStream(f);
  Writer out = new OutputStreamWriter(fos, "UTF8");
  out.write(str);
  out.close();  
}catch (IOException e) {
LOG.error(e.getMessage(), e);
}

优化try-catch后,代码如下:

try(FileOutputStream fos = new FileOutputStream(f);){
Writer out = new OutputStreamWriter(fos, "UTF8");
out.write(str);
out.flush();
} catch (IOException e) {
LOG.error(e.getMessage(), e);
}

但是写到文件的数据被截断,原因是try(code){},会自动执行out.close()方法时,数据还在缓冲区,还没有完全写入到文件中,因此产生这个问题。只需要添加out.flush()把缓冲区的数据刷到文件即可。

try(FileOutputStream fos = new FileOutputStream(f);){
Writer out = new OutputStreamWriter(fos, "UTF8");
out.write(str);
out.flush();
}

3.总结

其它Writer的子类遇到此问题,也可以如此处理。

在try-catch机制优化IO流关闭时,OutputStreamWriter 数据流被截断的更多相关文章

  1. Java IO流关闭问题的深入研究

    转自:https://blog.csdn.net/maxwell_nc/article/details/49151005 前几天看了一篇文章(见参考文章),自己动手试了下,发现有些不一样结论,作博客记 ...

  2. [转载]java中io流关闭的顺序

    原文URL:http://blog.csdn.net/shijinupc/article/details/7191655 还是先看API void close()            Closes ...

  3. java IO流 总结

    [-] 1什么是IO 2数据流的基本概念 1 数据流 2 输入流Input  Stream 3 输出流 数据流分类 3 标准IO 命令行参数 标准输入输出数据流 4javaIO层次体系结构 5 非流式 ...

  4. 学习笔记-java IO流总结 转载

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  5. Java文件处理之IO流

    一.概述 流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象 :其作用是为数据源和目的地建立一个输送通道. IO流:是程序中一套用于数据传输的机制.IO流是Input流和Outpu ...

  6. Java的IO流以及输入流与输出流的异同

    一:流的基本概念:           Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.J ...

  7. 第54节:Java当中的IO流(中)

    Java当中的IO流(中) 删除目录 // 简书作者:达叔小生 import java.io.File; public class Demo{ public static void main(Stri ...

  8. JavaSE | IO流

    java.io.File类(文件和目录路径名的抽象表示形式) 如果希望在程序中操作文件和目录都可以通过File类来完成,File类能新建.删除.重命名文件和目录. File类是文件或目录的路径,而不是 ...

  9. day22<IO流+>

    IO流(序列流) IO流(序列流整合多个) IO流(内存输出流) IO流(内存输出流之黑马面试题) IO流(对象操作流ObjecOutputStream) IO流(对象操作流ObjectInputSt ...

随机推荐

  1. java用poi读取Excel表格中的数据

    Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版.Apache POI 代 ...

  2. ElasticSearch搜索介绍四

    ElasticSearch搜索 最基础的搜索: curl -XGET http://localhost:9200/_search 返回的结果为: { "took": 2, &quo ...

  3. 决策树--信息增益,信息增益比,Geni指数的理解

    决策树 是表示基于特征对实例进行分类的树形结构       从给定的训练数据集中,依据特征选择的准则,递归的选择最优划分特征,并根据此特征将训练数据进行分割,使得各子数据集有一个最好的分类的过程.   ...

  4. Scala进阶之路-Scala中的泛型介绍

    Scala进阶之路-Scala中的泛型介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 通俗的讲,比如需要定义一个函数,函数的参数可以接受任意类型.我们不可能一一列举所有的参数类 ...

  5. unity2D动画和图片切割

    视频地址:   http://www.tudou.com/listplay/siFwDsllSEM.html 恩,我得到了素材,是这样的 这是一整张的图片,png格式的.很明显,这是类似于一个帧动画之 ...

  6. 8、JPA-映射-双向一对一

    一个管理对应一个部门,一个部门对应一个管理,例中由部门维护关联关系 实体类 Department package com.jpa.yingshe; import javax.persistence.* ...

  7. springboot下实现邮件发送功能

    springboot给我们封装好了邮件功能,非常简单,只需要稍微配置下就ok. 引入jar <dependency> <groupId>org.springframework. ...

  8. CentOS6.x网易163yum源配置

    一.备份原yum源 [root@yancy ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.$(d ...

  9. oracle先排序再分页

    只做简单记录 按操作时间排序1 SELECT A.*, ROWNUM RN FROM (SELECT * FROM v_log) A ORDER BY operatetime DESC 结果 可以发现 ...

  10. [C++]指针和指向数组的指针[一维数组与指针]

     1.一维数组与指针      形如:int型 数组 a[10]                1)&a[0]  地址常量;地址类型:int *型   ; 存储数组a的首地址          ...