Не могу понять, почему решение не проходит проверку ни по одному пункту, кроме первого.
Подскажите, если есть идеи?
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 stringFilePath = args[0];
String stringZipPath = args[1];
// String stringFilePath = "/Users/vasiliy/ThisIsTestDirectory/AddesFile.txt";
// String stringZipPath = "/Users/vasiliy/ThisIsTestDirectory/Archive.1.zip";
// Имена файлов и содержимое
Map<String, byte[]> zipEntryMap = new HashMap<>();
try (InputStream inputStream = new FileInputStream(stringZipPath);
ZipInputStream zipInputStream = new ZipInputStream(inputStream)) {
// вычитываем всю информацию из архива
ZipEntry currentEntry;
while ((currentEntry = zipInputStream.getNextEntry()) != null) {
// если текущая entry — это директория
if (currentEntry.isDirectory()) {
zipEntryMap.put(currentEntry.getName(), new byte[0]);
continue;
}
// если текущая entry — это файл
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int size = 0;
while ((size = zipInputStream.read(buffer)) != -1) {
byteArrayOutputStream.write(buffer,0,size);
}
zipEntryMap.put(currentEntry.getName(), byteArrayOutputStream.toByteArray());
zipInputStream.closeEntry();
byteArrayOutputStream.close();
}
}
// String newZip = "/Users/vasiliy/ThisIsTestDirectory/Archive.1.zip";
String newZip = args[1]; // путь нового архива
// вычитываем файл, пришедший в аргумент метода
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try (FileInputStream fileInputStream = new FileInputStream(stringFilePath)) {
byte[] buffer = new byte[1024];
while (fileInputStream.available() > 0) {
int size = fileInputStream.read(buffer);
byteArrayOutputStream.write(buffer,0,size);
}
}
byteArrayOutputStream.close();
// удаляем старый архив (не влияет на результат и на прохождение проверки)
// Files.delete(Paths.get(stringZipPath));
// создаём entry для файла из аргументов метода
Path path = Paths.get(stringFilePath);
String entryName = "new" + File.separator + path.getFileName();
ZipEntry addEntry = new ZipEntry(entryName);
// если такой файл уже есть, в архиве, удаляем его
Map<String,byte[]> zipEntryMap2 = new HashMap<>(zipEntryMap);
for (String entry : zipEntryMap2.keySet()) {
if (entry.equals(addEntry.getName()))
zipEntryMap.remove(entry);
}
try (OutputStream outputStream = new FileOutputStream(newZip);
ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream)) {
// добавляем в архив новый файл
zipOutputStream.putNextEntry(addEntry);
zipOutputStream.write(byteArrayOutputStream.toByteArray());
byteArrayOutputStream.close();
// добавляем в архив прежние файлы
for (String zipEntry : zipEntryMap.keySet()) {
zipOutputStream.putNextEntry(new ZipEntry(zipEntry));
zipOutputStream.write(zipEntryMap.get(zipEntry));
zipOutputStream.closeEntry();
}
}
}
}