почему не проходит 3 последние пункта?
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 {
String filePath = args[0];
// String zipPath = args[1]; валидатор ругался
// сохраняем содержимое zip в мапу
ZipInputStream zis = new ZipInputStream(new FileInputStream(args[1]));
HashMap<String, ByteArrayOutputStream> map = new HashMap<>();
ZipEntry ze;
while ((ze = zis.getNextEntry()) != null) {
int bytesRead;
byte[] aa = new byte[8192*32]; // не знаю почему 8192, нагуглил пример
ByteArrayOutputStream ba = new ByteArrayOutputStream();
while ((bytesRead = zis.read(aa)) != -1) { // проверить содержимое, может не все байты читаюстя
ba.write(aa, 0, bytesRead);
}
ba.close();
// System.out.println(ze.isDirectory());
map.put(ze.getName(), ba);
zis.closeEntry(); // закрываем entry
}
zis.close(); // закрываем поток
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(args[1])); // zip для вывода, она совпадает с zip для чтения, т.к. нам эту зипку надо заменить
// записываем entry В поток
String fileName = filePath.substring(filePath.lastIndexOf(File.separator)+1);
ZipEntry zipEntryOut = new ZipEntry("new"+ File.separator + fileName); // создаем zip entry (это пустышка, там ничего нет, просто имя файла и если есть имя папки)
zipEntryOut.setSize(Files.readAllBytes(Paths.get(filePath)).length);
zos.putNextEntry(zipEntryOut);
// записываем в поток содержимое файла
Files.copy(Paths.get(args[0]), zos);
// byte[] arr = Files.readAllBytes(Paths.get(filePath));
//
// zos.write(arr);
// закрываем Entry
zos.closeEntry();
for (Map.Entry<String, ByteArrayOutputStream> entry : map.entrySet()) {
if (entry.getKey().equalsIgnoreCase("new"+File.separator+fileName)) continue; // если совпадет то должно перезаписаться, т.е. этот файл не записываем
if (entry.getKey().equalsIgnoreCase(fileName)) continue; // если совпадет то должно перезаписаться, т.е. этот файл не записываем
// ZipEntry zipEntry = new ZipEntry(entry.getKey());
// zipEntry.setSize(entry.getValue().size());
zos.putNextEntry(new ZipEntry(entry.getKey()));
byte[] arr1 = entry.getValue().toByteArray();
zos.write(arr1);
zos.closeEntry();
}
zos.close();
}
}