private static final String EXCEL_TEMPLATE_PATH = "/WEB-INF/SeikyuuTemplate.xls";
private byte[] templateByteArray;
public void downloadZip(HttpServletResponse response,
HttpServletRequest request, String seikyuu_ym) {
List seikyuuymList = this.getSeikyuuymTorihikiList(seikyuu_ym);
String dateOut = getDate();
String zipName = "請求書一括" + dateOut + ".zip";
response.reset();
try {
String filePath = getTemplateFilePath(request);
byte[] cachedByteArray = getTemplateByteArray(filePath);
zipName = new String(zipName.getBytes("MS932"), "8859_1");
response.setHeader("Content-Disposition", "attachment; filename="
+ zipName);
ServletOutputStream outputStream = response.getOutputStream();
BufferedOutputStream bros = new BufferedOutputStream(outputStream);
ZipOutputStream objZos = new ZipOutputStream(bros);
objZos.setEncoding("MS932");
int i = 0;
for (Iterator iter = seikyuuymList.iterator(); iter.hasNext();) {
i++;
SeikyuuBean objSeikyuu = (SeikyuuBean) iter.next();
Integer seikyuu_id = objSeikyuu.getSeikyuu_id();
Integer torihiki_nm_id = objSeikyuu.getTorihiki_nm_id();
// get seikyuu msg
SeikyuuBean seikyuuTorihiki = this
.getSeikyuuTorihikiMsg(seikyuu_id);
// get seikyuu detail list
List seikyuuDetaillist = this.getSeikyuuCustomList(
torihiki_nm_id, seikyuu_ym);
ByteArrayOutputStream objBos = new ByteArrayOutputStream();
ByteArrayInputStream templateIn = new ByteArrayInputStream(
cachedByteArray);
HSSFWorkbook workbook = new HSSFWorkbook(templateIn);
this.getExcelGenerator().excelGenerator(workbook,
seikyuuDetaillist, seikyuuTorihiki);
workbook.write(objBos);
String xlsName = seikyuuTorihiki.getTorihiki_nm_kanji() + "_"
+ dateOut + "_" + i + ".xls";
xlsName = getResetFileName(xlsName);
ZipEntry objZe = new ZipEntry(xlsName);
objZe.setMethod(ZipOutputStream.DEFLATED);
objZos.putNextEntry(objZe);
byte[] aryByt = objBos.toByteArray();
objZos.write(aryByt, 0, aryByt.length);
objBos.close();
}
objZos.closeEntry();
objZos.close();
bros.close();
outputStream.close();
} catch (IOException ioe) {
log.error("ExcelFile書き出し中にIOExeptionが発生しました。", ioe);
throw new RuntimeException("失敗しました。", ioe);
}
}
String getTemplateFilePath(HttpServletRequest request) {
return request.getSession().getServletContext().getRealPath(
EXCEL_TEMPLATE_PATH);
}
synchronized byte[] getTemplateByteArray(String filePath) {
if (templateByteArray == null) {
FileInputStream fin = null;
BufferedInputStream bin = null;
try {
fin = new FileInputStream(filePath);
bin = new BufferedInputStream(fin);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int b = -1;
while ((b = bin.read()) > -1) {
baos.write(b);
}
baos.close();
templateByteArray = baos.toByteArray();
log.debug("templateByteArray.length = "
+ templateByteArray.length);
} catch (FileNotFoundException e) {
throw new RuntimeException("TemplateFileが存在しません。"
+ e.getMessage(), e);
} catch (IOException e) {
throw new RuntimeException("TemplateFileの読み込みに失敗しました。"
+ e.getMessage(), e);
} finally {
if (bin != null) {
try {
bin.close();
} catch (IOException e) {
throw new RuntimeException(
"TemplateFileの読み込み時にStreamのCloseに失敗しました。"
+ e.getMessage(), e);
}
}
}
}
return templateByteArray;
}