Проверял, все работает, если в архиве в папке new/ файл совпадает с названием не пишет, заменяет тем что приходит , что не так то?)
package com.javarush.task.task31.task3105;
import org.w3c.dom.NamedNodeMap;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.LinkedHashMap;
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 {
Map<String, byte[]> map = new LinkedHashMap<>();
Path file = Paths.get(args[0]);
// Path file = Paths.get("D://isDirectory//isfile.txt");
// Path file = Paths.get("D://sdfsf.msi");
// ZipInputStream readZip = new ZipInputStream(new FileInputStream("D://isDirectory//WinRAR.zip"));
ZipInputStream readZip = new ZipInputStream(new FileInputStream(args[1]));
ZipEntry zipEntry = readZip.getNextEntry();
while (zipEntry!= null){
byte[] bytes = new byte[(int)zipEntry.getSize()];
while (readZip.available() > 0){
if (zipEntry.isDirectory()) break;
int x = readZip.read(bytes);
}
if (!(zipEntry.getName().equals("new/"+file.getFileName()))) {
map.put(zipEntry.getName(), bytes);
}
zipEntry = readZip.getNextEntry();
}
readZip.close();
// ZipOutputStream zipAdd = new ZipOutputStream(new FileOutputStream("D://isDirectory//WinRAR2.zip"));
ZipOutputStream zipAdd = new ZipOutputStream(new FileOutputStream(args[1]));
ZipEntry zipEntry1 = new ZipEntry("new/"+file.getFileName());
zipAdd.putNextEntry(zipEntry1);
Files.copy(file, zipAdd);
for (Map.Entry<String, byte[]> pair : map.entrySet() ){
zipAdd.putNextEntry(new ZipEntry(pair.getKey()));
zipAdd.write(pair.getValue());
}
zipAdd.close();
}
}