По поводу условия
entry.getName().equals(nameFile) || entry.getName().equals("new/"+nameFile)
Это я сравнила с решением на гитхабе.
Оно работает так : если среди файлов уже есть такой файл (не в папке new) , то появляется папка new и туда помещается обновлённый файл (старый исчезает).
Если есть уже new/[fileName], то этот файл просто обновляется.
package com.javarush.task.task31.task3105;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.CRC32;
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, byte[]> list;
ZipInputStream zipStream = new ZipInputStream(new FileInputStream(args[1]));
list = new HashMap<>();
String nameFile = args[0].substring(args[0].lastIndexOf("/")+1);
while (zipStream.available()>0) {
ZipEntry entry = zipStream.getNextEntry();
if (entry!=null)
{
byte[] buff=new byte[0];
if (entry.getName().equals(nameFile) || entry.getName().equals("new/"+nameFile))
{
FileInputStream fis = new FileInputStream(args[0]);
buff = new byte[fis.available()];
fis.read(buff);
entry = new ZipEntry("new/"+nameFile);
entry.setSize(buff.length);
CRC32 crc = new CRC32();
crc.reset();
crc.update(buff);
entry.setCrc(crc.getValue());
}
else
{
buff = new byte[(int)entry.getSize()>0?(int)entry.getSize():0];
zipStream.read(buff);
}
list.put(entry, buff);
}
}
zipStream.close();
//Path fileToZip = Paths.get(args[0]);
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(args[1]));
for (Map.Entry<ZipEntry, byte[]> entry :list.entrySet())
{
zos.putNextEntry(entry.getKey());
zos.write(entry.getValue());
}
zos.finish();
zos.close();
}
}