Файл переписывается, содержимое тоже.
package com.javarush.task.task31.task3105;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
/*
Добавление файла в архив
*/
public class Solution {
public static void main(String[] args) throws IOException {
HashMap<ZipEntry, ByteArrayOutputStream> readEntryContent = new HashMap<>();
String newFileName = Paths.get("new", args[0]).toString();
try (ZipInputStream zipInitialArchive = new ZipInputStream(new FileInputStream(args[1]))) {
ZipEntry entry = null;
byte[] buffer = new byte[4048];
while ((entry = zipInitialArchive.getNextEntry()) != null) {
if ( !entry.getName().equals(newFileName)) {
int count;
ByteArrayOutputStream content = new ByteArrayOutputStream();
while ((count = zipInitialArchive.read(buffer)) != -1) {
content.write(buffer, 0, count);
}
readEntryContent.put(entry, content);
}
}
} catch (IOException e) {
}
try (ZipOutputStream zipArchive = new ZipOutputStream(new FileOutputStream(args[1]))) {
zipArchive.putNextEntry(new ZipEntry(newFileName));
Files.copy(Paths.get(args[0]), zipArchive);
for (ZipEntry entry : readEntryContent.keySet()) {
zipArchive.putNextEntry( entry );
zipArchive.write(readEntryContent.get(entry).toByteArray());
}
} catch (IOException e) {
}
}
}
после добавления нового entry в архив и записи в него, его надо закрыть.а в 39 кто будет добавлять? и надо добавлять не close() , а closeEntry()close() закрывает поток на запись. сказало что избыточно, потому что try-with-resources у тебя и поток закроется автоматически.