Dai un'occhiata alla libreria Apache Commons Compress, ha dimostrato la funzionalità di cui hai bisogno.
Naturalmente "erickson" ha ragione con il suo impegno per la tua domanda. Avrai bisogno del file conentet e non dell'oggetto java.io.File
. Nel mio esempio presumo che tu abbia un metodo byte[] getTheContentFormSomewhere(int fileNummer)
che restituisce il contenuto del file (in memoria) per il fileNummer-esimo file. - Ovviamente questa funzione è di design scadente, ma è solo per ilustration.
Dovrebbe funzionare un po 'come questo:
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 del vostro controller 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();
Cosa vuoi dire che sia un 'java.io.File'? Un oggetto 'File' è solo un oggetto di indirizzo di fantasia; non porta alcun contenuto di file. Dove sono i tuoi dati? – erickson