Java⽂件流“java.io.IOException:StreamClosed”异常解决和
java stream分析
1.有问题的代码
//根据临时的zip压缩包路径,创建zip⽂件
File zip = new File(zipFilePath);
FileOutputStream fos = null;
ZipOutputStream zos = null;
try {
if (!ists()){
}
/
/创建zip⽂件输出流 a.注意引⽤顺序
fos = new FileOutputStream(zip);
zos = new ZipOutputStream(fos); //循环读取⽂件路径集合,获取每⼀个⽂件的路径
for(String fp : fileList){
File f = new File(excelDir, fp); //根据⽂件路径创建⽂件
zipFile(f, zos); //将每⼀个⽂件写⼊zip⽂件包内,即进⾏打包
response.flushBuffer();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try{ //b.注意关闭顺序
if(fos != null){
fos.close();
}
if(zos != null){
zos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
按照上⾯的⽅式b.关闭代码会报java.io.IOException: Stream Closed异常;
通常我们的想法时只要关闭⼯作流就可以了,但有些时候这样⽆顺序关闭⽂件流会报异常,那么产⽣的原因是什么?
因为我在zos⽂件流中⽤到了fos⽂件流,先去关闭fos时,再去关闭zos时,zos关闭时会⽤到fos,所以会报刚才说这异常;
解决办法修改流关闭顺序:
if(zos != null){
zos.close();
}
if(fos != null){
fos.close();
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论