Взгляните на библиотеку Apache Commons Compress , она обеспечивает необходимую вам функциональность.
Конечно, «Эриксон» прав в своем комментарии к вашему вопросу.Вам понадобится содержимое файла, а не объект java.io.File
.В моем примере я предполагаю, что у вас есть метод byte[] getTheContentFormSomewhere(int fileNummer)
, который возвращает содержимое файла (в памяти) для файла fileNummer-й.- Конечно, эта функция плохого дизайна, но она только для иллюстрации.
Она должна работать примерно так:
void compress(final OutputStream out) {
ZipOutputStream zipOutputStream = new ZipOutputStream(out);
zipOutputStream.setLevel(ZipOutputStream.STORED);
for(int i = 0; i < 10; i++) {
//of course you need the file content of the i-th file
byte[] oneFileContent = getTheContentFormSomewhere(i);
addOneFileToZipArchive(zipOutputStream, "file"+i+"."txt", oneFileContent);
}
zipOutputStream.close();
}
void addOneFileToZipArchive(final ZipOutputStream zipStream,
String fileName,
byte[] content) {
ZipArchiveEntry zipEntry = new ZipArchiveEntry(fileName);
zipStream.putNextEntry(zipEntry);
zipStream.write(pdfBytes);
zipStream.closeEntry();
}
Фрагменты вашего http-контроллера:
HttpServletResponse response
...
response.setContentType("application/zip");
response.addHeader("Content-Disposition", "attachment; filename=\"compress.zip\"");
response.addHeader("Content-Transfer-Encoding", "binary");
ByteArrayOutputStream outputBuffer = new ByteArrayOutputStream();
compress(outputBuffer);
response.getOutputStream().write(outputBuffer.toByteArray());
response.getOutputStream().flush();
outputBuffer.close();