В этом коде я попытался сначала создать новый архив, скопировать туда все файлы (включая новый), а потом его переименовать. Вот только новый архив создается правильно, только если в исходном архиве маленькие файлы. Если в архиве файлы чуть побольше - выскакивает исключение "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();