Коллеги, добрый день. Не понимаю, почему Валидатору не нравится мое решение. Это уже 3-й вариант решения. И все не нравится.
package com.javarush.task.task31.task3105;
import java.io.*;
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.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 {
HashMap<ZipEntry, byte[]> entryHashMap = new HashMap<>();
ArrayList<String> fileList = new ArrayList<>();
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(args[1]), Charset.forName("CP866"));
ZipEntry zipEntry = null;
while ((zipEntry = zipInputStream.getNextEntry()) != null){
fileList.add(zipEntry.toString());
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1048];
int len = 0;
while ((len = zipInputStream.read(buffer)) > 0){
byteArrayOutputStream.write(buffer, 0, len);
}
entryHashMap.put(zipEntry, byteArrayOutputStream.toByteArray());
byteArrayOutputStream.close();
}
zipInputStream.close();
ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(args[1]), Charset.forName("CP866"));
int i = 0;
for (Map.Entry<ZipEntry, byte[]> entry: entryHashMap.entrySet()) {
if (fileList.get(i).equalsIgnoreCase("new/" + args[0].substring(args[0].lastIndexOf("\\") + 1))){
continue;
}
zipOutputStream.putNextEntry(entry.getKey());
zipOutputStream.write(entry.getValue());
i++;
}
zipEntry = new ZipEntry("new/" + args[0].substring(args[0].lastIndexOf("\\") + 1));
zipOutputStream.putNextEntry(zipEntry);
Files.copy(Paths.get(args[0]), zipOutputStream);
zipOutputStream.close();
}
}