Java文件流“java.io.IOException: Stream Closed”異常解決和分析

1.有問題的代碼

 //根據臨時的zip壓縮包路徑,創建zip文件
        File zip = new File(zipFilePath);
        FileOutputStream fos = null;
        ZipOutputStream zos = null;
        try {
            if (!zip.exists()){
                zip.createNewFile();
            }

            //創建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,所以會報剛纔說這異常;

更深入的原因參考:https://blog.csdn.net/u014617239/article/details/52252438

解決辦法修改流關閉順序:

if(zos != null){
                    zos.close();
                }
if(fos != null){
                    fos.close();
                }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章