Подскажите, пожалуйста, по какой причине не выполняются следующие условия:
Я пока не могу разобраться с тем, как правильно использовать Files.copy, поэтому этот пункт тоже не выполняется, но мне пока что это не важно. Не могу понять, что с остальными условиями?
Протестировал все сценарии, всё копируется и файл обновляется без проблем внутри архива.

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.HashMap;
import java.util.Map;
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 {
ZipEntry foundFile = null; //if file exists in archive it will be linked to this entry
Path filePath = Paths.get(args[0]);
Path archivePath = Paths.get(args[1]);
byte[] fileBuffer = Files.readAllBytes(filePath);
String fileName = filePath.getFileName().toString();
HashMap<ZipEntry, byte[]> archiveContent = new HashMap<>();
FileInputStream fileInputStream = new FileInputStream(archivePath.toAbsolutePath().toString());
ZipInputStream zipInputStream = new ZipInputStream(fileInputStream);
//reading archive content to HashMap
ZipEntry ze;
while ((ze = zipInputStream.getNextEntry()) != null) {
if (ze.getName().equals(fileName)) foundFile = ze;
if (ze.getSize() != -1 ) {
byte[] content = new byte[(int) ze.getSize()];
zipInputStream.read(content);
archiveContent.put(ze, content);
}
}
zipInputStream.close();
fileInputStream.close();
FileOutputStream fileOutputStream = new FileOutputStream(archivePath.toAbsolutePath().toString());
ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream);
//writing content of HashMap back to archive considering condition of file presence
if (foundFile != null) {
archiveContent.remove(foundFile);
ZipEntry updatedFile = new ZipEntry(fileName);
archiveContent.put(updatedFile, fileBuffer);
for (Map.Entry<ZipEntry, byte[]> entry: archiveContent.entrySet()) {
zipOutputStream.putNextEntry(entry.getKey());
zipOutputStream.write(entry.getValue());
}
}
else {
ZipEntry fileEntry = new ZipEntry("new/"+filePath.getFileName().toString());
archiveContent.put(fileEntry, fileBuffer);
for (Map.Entry<ZipEntry, byte[]> entry: archiveContent.entrySet()) {
zipOutputStream.putNextEntry(entry.getKey());
zipOutputStream.write(entry.getValue());
}
}
zipOutputStream.close();
fileOutputStream.close();
}
}