при ручном прогоне всё работает как надо, но валидатору не нравятся два пункта.
В коде явно вижу их присутствие и исполнение.
package com.javarush.task.task31.task3105;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
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 {
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(args[1])); // Получим сам архив
ZipOutputStream zipOutputStream = null; // объявим переменну под результат
Path path = Paths.get(args[0]); //
HashMap<ZipEntry, ByteArrayOutputStream> map = new HashMap<ZipEntry, ByteArrayOutputStream>(); // Начальная пустая map с данными из архива
ZipEntry zipBbuffer; //
String sFutureFileName = "NEW/" + path.getFileName().toString().toUpperCase(); // Имя будущего файла, которое мы запишем
//пишем zip архив в мапу
while ((zipBbuffer = zipInputStream.getNextEntry()) != null) { //Обойдём все внутренние файлы
if (!(zipBbuffer.getName().toUpperCase().equals(sFutureFileName))) { // таким образом я не буду запоминать то, что потом я писать не буду.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int length = 0;
byte[] buffer = new byte[1024 * 1024]; // зарезервизуем 1 МБ
try {
while ((length = zipInputStream.read(buffer)) != -1) { // Заполняю поток байтами
baos.write(buffer, 0, length); // Бывает так, что приходит кусками
}
map.put(zipBbuffer, baos); //Запишем в map полный результат
} catch (Exception e) {
System.out.println("Ошибка чтения данных из архива");
}
}
}
zipInputStream.close(); // Всё закроем поток на чтение
//Начинаем запись в новый архив
zipOutputStream = new ZipOutputStream(new FileOutputStream(args[1]));
//Пишем все имеющиеся рание в архиве файлы в архив
for (HashMap.Entry<ZipEntry, ByteArrayOutputStream> current : map.entrySet()) {
try {
zipOutputStream.putNextEntry(new ZipEntry(current.getKey().getName())); //запишем новый элемент с именем
zipOutputStream.write(current.getValue().toByteArray()); // Запишем содержимое
//System.out.println(current.getKey().getName() + " размер " + current.getKey().getSize() ) ;
zipOutputStream.closeEntry(); // Закроем данный файл в архиве
} catch (Exception e) {
System.out.println(e.getCause());
}
}
//дописываем файл, который нужен.
zipOutputStream.putNextEntry(new ZipEntry(sFutureFileName));
Files.copy(path, zipOutputStream);
zipOutputStream.close();
}
}