1. Код работает как в условии. валидатору не нравится. хотя все потоки и открыл и закрыл. Один принял, второй открыл тем же способом но его не принял.
2. Когда для теста писал в другом проекте у ZipOutputStream был метод readAllByte() . А в проекте с решением нет(.
package com.javarush.task.task31.task3105;
import java.awt.*;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
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 {
Path pathArh = Paths.get(args[1]);
Path pathFileForAdd = Paths.get(args[0]);
Map<Path,byte[]> pathEndData = new HashMap<>();
ZipInputStream zipInputStream = new ZipInputStream(Files.newInputStream(pathArh));
ZipEntry zipEntry;
while ((zipEntry = zipInputStream.getNextEntry()) != null){
byte[] buffer = new byte[zipInputStream.available()];
int index = 0;
while (zipInputStream.available() > 0){
buffer[index] = (byte) zipInputStream.read();
index++;
}
pathEndData.put(Paths.get(zipEntry.getName()), buffer);
}
ZipOutputStream zipOutputStream = new ZipOutputStream(Files.newOutputStream(pathArh));
for(Path path: pathEndData.keySet()){
zipEntry = new ZipEntry(path.toString());
zipOutputStream.putNextEntry(zipEntry);
zipOutputStream.write(pathEndData.get(path));
zipOutputStream.closeEntry();
}
zipOutputStream.putNextEntry(new ZipEntry("new/" + pathFileForAdd.getFileName()));
Files.copy(pathFileForAdd, zipOutputStream);
zipOutputStream.closeEntry();
zipOutputStream.close();
zipInputStream.close();
}
}