Werfen Sie einen Blick auf die Apache Commons Compress Bibliothek, es stellte die Funktion zur Verfügung, die Sie benötigen.
Natürlich "Erickson" ist Recht mit seinem Kommentar zu Ihrer Frage. Sie benötigen die Datei conentet und nicht das Objekt java.io.File
. In meinem Beispiel gehe ich davon aus, dass Sie eine Methode byte[] getTheContentFormSomewhere(int fileNummer)
haben, die den Dateiinhalt (im Speicher) für die Dateinummer-Datei zurückgibt. - Natürlich ist diese Funktion schlechtes Design, aber es ist nur für die Illustration.
Es sollte ein bisschen wie diese Arbeit:
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 Ihrer http Controller:
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();
Was meinen Sie es ein 'java.io.File' ist? Ein 'File'-Objekt ist nur ein schickes Adressobjekt; Es enthält keinen Dateiinhalt. Wo sind deine Daten? – erickson