OutputStream flush方法

项目有个人员导入的功能,当excel文件验证不通过时,会把错误标识写到excel里面,然后返回页面可以下载错误的excel,但是出现了一个bug就是有时下载的excel,并不是这次操作导入的excel文件,很奇怪的问题,一开始以为浏览器缓存但是加了时间戳之后还是不行,后来发现可能是io流有缓存,开始只做了关闭没有清除

    OutputStream os = null;
                flag = "-1";
                try {
                    os = new FileOutputStream(Photo.getAbsolutePath(ERR_FILE_NAME));
                    Workbook wb = eir.getWorkbook();
                    wb.write(os);
                } catch (Exception e) {
                    throw e;
                } finally {
                    if (os != null) {
                        os.flush();//这个是关键
                        os.close();
                    }
                }

下面是从百度搜索的资料

public void flush()
           throws IOException
刷新此输出流并强制写出所有缓冲的输出字节。flush 的常规协定是:如果此输出流的实现已经缓冲了以前写入的任何字节,则调用此方法指示应将这些字节立即写入它们预期的目标。
如果此流的预期目标是由基础操作系统提供的一个抽象(如一个文件),则刷新此流只能保证将以前写入到流的字节传递给操作系统进行写入,但不保证能将这些字节实际写入到物理设备(如磁盘驱动器)。
 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值