srikanth-lingala / zip4j

A Java library for zip files and streams
Apache License 2.0
2.01k stars 307 forks source link

ZipOutputStream does not consider setOverrideExistingFilesInZip for existing files #496

Closed vir8wh47 closed 1 year ago

vir8wh47 commented 1 year ago

When use net.lingala.zip4j.io.outputstream.ZipOutputStream to write file into a zip archive, setOverrideExistingFilesInZip (of net.lingala.zip4j.model.ZipParameters) seems not works and not consider file existence.

In the follow example you'll found a.txt twice in the zip.

    public static void main(String[] args) throws Exception {

        File fileA = new File("/path/to/fileA");
        File fileB = new File("/path/to/fileB");

        try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream("/path/to/file.zip"))) {
            ZipParameters zipParameters = new ZipParameters();
            zipParameters.setOverrideExistingFilesInZip(true);

            zipParameters.setEntrySize(fileA.length());
            zipParameters.setFileNameInZip("a.txt");
            zipOutputStream.putNextEntry(zipParameters);

            try (InputStream inputStream = new FileInputStream(fileA)) {
                IOUtils.copy(inputStream, zipOutputStream);
            }
            zipOutputStream.closeEntry();

            zipParameters.setEntrySize(fileB.length());
            zipParameters.setFileNameInZip("a.txt");
            zipOutputStream.putNextEntry(zipParameters);

            try (InputStream inputStream = new FileInputStream(fileB)) {
                IOUtils.copy(inputStream, zipOutputStream);
            }
            zipOutputStream.closeEntry();
        }
}
srikanth-lingala commented 1 year ago

setOverrideExistingFilesInZip works only with ZipFile api and not with ZipOutputStream. When using ZipOutputStream it will not be possible to modify a zip file (i.e., to remove a file from zip for example). I will add it to the documentation for setOverrideExistingFilesInZip.

vir8wh47 commented 1 year ago

Thanks for reply and for documentation update!