По моей логике, все содержимое должно записываться.
package com.javarush.task.task31.task3105;
import java.io.*;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
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 {
Map<String, byte[]> entries = new TreeMap<>();
try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(args[1]))) {
ZipEntry entry;
while ((entry = zipInputStream.getNextEntry()) != null) {
byte[] buffer = new byte[zipInputStream.available()];
zipInputStream.read(buffer, 0, zipInputStream.available());
entries.put(entry.getName(), buffer);
}
}
FileOutputStream zipFile = new FileOutputStream(args[1]);
ZipOutputStream zip = new ZipOutputStream(zipFile);
File file = new File(args[0]);
zip.putNextEntry(new ZipEntry("new/" + file.getName()));
Files.copy(file.toPath(), zip);
for (Map.Entry<String, byte[]> entry : entries.entrySet()) {
if (!entry.getKey().equals("new/" + file.getName())) {
ZipEntry zipEntry = new ZipEntry(entry.getKey());
zip.putNextEntry(zipEntry);
zip.write(entry.getValue());
zip.closeEntry();
}
}
zip.close();
}
}