В этом коде я попытался сначала создать новый архив, скопировать туда все файлы (включая новый), а потом его переименовать. Вот только новый архив создается правильно, только если в исходном архиве маленькие файлы. Если в архиве файлы чуть побольше - выскакивает исключение "java.util.zip.ZipException: invalid entry compressed size (expected 33 but got 37 bytes)" и указывает на строку "zipOutput.closeEntry();". В чем причина?
Path file = Paths.get(args[0]);
        Path archive = Paths.get(args[1]);


            ZipOutputStream zipOutput = new ZipOutputStream(new FileOutputStream(archive.getParent().toString() + "/temp.zip"));
            ZipEntry fileWrite = new ZipEntry("new/" + file.getFileName().toString());
            zipOutput.putNextEntry(fileWrite);

            Files.copy(file, zipOutput);
            zipOutput.closeEntry();

            ZipInputStream zipInput = new ZipInputStream(new FileInputStream(args[1]));
            ZipEntry zipEntry;

            Path folder = Paths.get(archive.getParent().toString() + "/tempFile");
            while ((zipEntry = zipInput.getNextEntry()) != null) {
                zipOutput.putNextEntry(zipEntry);

                Files.copy(zipInput, folder, StandardCopyOption.REPLACE_EXISTING);
                Files.copy(folder, zipOutput);
                zipOutput.flush();
                zipOutput.closeEntry();
            }

            zipInput.close();
            zipOutput.close();