首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

Apache 的zipOutputStream write error异常

2012-09-18 
Apache 的zipOutputStream write error错误Java codepublic static InputStream writeExcel(ArchiveVO arc

Apache 的zipOutputStream write error错误

Java code
public static InputStream writeExcel(ArchiveVO archiveVO, List<ArchiveDatatypeVO> archiveDatatypeVOList, String filePath , DataTypeMgtService dataTypeMgtService, DataArchiveMgtService dataArchiveMgtService) throws Exception {        InputStream inputStream = null;        //创建输出文件        File file = new File(filePath , archiveVO.getName()+".zip");        if(!file.exists()){            file.createNewFile();        }else{            file.delete();        }        //定义压缩输出流,用来输出到压缩文件中        ZipOutputStream zos = new ZipOutputStream(file);        ZipEntry entry = null;        for (ArchiveDatatypeVO advo : archiveDatatypeVOList) {            //查到要写入到当前工作簿的数据和数据类型的指标项。            List<DatatypeAttributeVO> davos = dataTypeMgtService.getDatatypeAttributeVOByDatatypeIdVO(advo.getDatatypeIdVO().getId());            List<Map<String,String>> datas = dataArchiveMgtService.getArchiveDataByArchiveDatatypeId(advo,davos);            //根据数据量来判断需要多少个sheet来存储数据            int sheetNum = (datas.size() + StatusUtil.EXCELMAXROW - 1) / StatusUtil.EXCELMAXROW;            //创建工作薄对象            XSSFWorkbook wb = new XSSFWorkbook();            //开始迭代sheet            for(int s = 0; s < sheetNum; s++){                int rowNum = 0;                if(s == sheetNum - 1){                    rowNum = datas.size() % StatusUtil.EXCELMAXROW;                }                XSSFSheet sheet = wb.createSheet("sheet" + s );                //将指标项列表的显示名称写入到sheet中的首行                XSSFRow firstRow = sheet.createRow(0);                for (int d = 0; d < davos.size(); d ++) {                    XSSFCell cell = firstRow.createCell(d);                    cell.setCellValue(davos.get(d).getDisplayName());                }                //迭代数据,List中的每条数据做为一行,而Map中的数据放到一个Cell里                for(int i = 0; i < datas.size(); i++){                    XSSFRow row = sheet.createRow(i + 1);                    Map<String, String> map = datas.get(i);                    for(int d = 0; d < davos.size(); d ++){                        DatatypeAttributeVO davo = davos.get(d);                        XSSFCell cell = row.createCell(d);                        cell.setCellValue(map.get(davo.getName()));                    }                }                            }            //将excel压缩到压缩文件中            entry = new ZipEntry(advo.getDatatypeIdVO().getName()+".xlsx");            zos.putNextEntry(entry);            zos.setEncoding("gbk");            //将excel直接写入到压缩文件中            wb.write(zos);            zos.closeEntry();        }        zos.close();        inputStream = new FileInputStream(file);                return inputStream;    }

需求:将数据库中的数据导出到excel里,由于会导成多个excel,所以我就放在了压缩包里,
问题:当执行到zos.putNextEntry(entry);这句,第一次执行的时候还没异常,第二次执行就出错,看了下api说这个方法会关闭之前打开的ZipEntry,并开始新的,所以我试着注释掉了 zos.closeEntry();。但还是抛异常。


求高手解答

[解决办法]
应该是文件没有正确结束吧

热点排行