Сохранение ZipOutputStream в zip-файл с Java
Я должен создать ZIP-архив в памяти. Но теперь мне нужно, чтобы он был сохранен в реальном файле.zip на диске. Как это сделать? псевдокод:
public byte[] crtZipByteArray(ByteArrayInputStream data,ZipEntry entry) throws IOException{
ByteArrayOutputStream zipout = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(zipout);
byte[] buffer = new byte[1024];
int len;
zos.putNextEntry(entry);
while ((len = data.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
zos.closeEntry();
zos.close();
data.close();
return zipout.toByteArray();
}
1 ответ
Замещать ByteArrayOutputStream zipout
с FileOutputStream zipout
,
Если вам необходимо вернуть байтовый массив как результат метода, используйте Apache Commons TeeOutputStream
дублировать вывод для двух потоков.
public byte[] crtZipByteArray(ByteArrayInputStream data,ZipEntry entry) throws IOException{
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
OutputStream fileOut = new FileOutputStream("filename.zip");
OutputStream teeOut = new TeeOutputStream(byteArrayOut, fileOut);
ZipOutputStream zos = new ZipOutputStream(teeOut);
.....
}