Сохранение 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();
}

person Serg88    schedule 20.02.2015    source источник
comment
stackoverflow.com/a/8337985/579580   -  person aviad    schedule 20.02.2015


Ответы (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);
.....
}
person Dmitriy Dobrotvorskiy    schedule 20.02.2015