项目有个人员导入的功能,当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 的常规协定是:如果此输出流的实现已经缓冲了以前写入的任何字节,则调用此方法指示应将这些字节立即写入它们预期的目标。
如果此流的预期目标是由基础操作系统提供的一个抽象(如一个文件),则刷新此流只能保证将以前写入到流的字节传递给操作系统进行写入,但不保证能将这些字节实际写入到物理设备(如磁盘驱动器)。