Zapoznaj się z biblioteką Apache Commons Compress, która udowodniła funkcjonalność, której potrzebujesz.
Oczywiście "erickson" ma rację z jego commment na twoje pytanie. Będziesz potrzebował conent pliku, a nie obiektu java.io.File
. W moim przykładzie zakładam, że masz metodę byte[] getTheContentFormSomewhere(int fileNummer)
, która zwraca zawartość pliku (w pamięci) pliku fileNummer-th. - Oczywiście ta funkcja jest kiepskim projektem, ale jest tylko dla ilustracji.
Powinno to działać trochę jak ten:
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();
}
Snipets swojego kontrolera 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();
Co masz na myśli, że to 'java.io.File'? Obiekt 'File' jest po prostu fantazyjnym obiektem adresowym; nie zawiera żadnej zawartości pliku. Gdzie są twoje dane? – erickson