Валидатор не хочет проверять, выдаёт тайм-аут. Всё работает, даже если в архиве mp3 файл есть и даже если mp3 файл добавлять. Один нюанс, выдаёт
Exception in thread "main" java.util.zip.ZipException: duplicate entry: new/10678aoevnyesf.mp3
at java.base/java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:232)
at com.javarush.task.task31.task3105.Solution.main(Solution.java:56)
если добавлять тот же файл в тот же архив после предыдущего аналогичного добавления. То есть в архиве уже есть в папке "new" файл который пытаються добавить. При всех других вариантах всё работает исправно, программа во всех случаях завершает свою работу.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.ArrayList;
import java.util.HashMap;
import java.util.List;
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 {
ZipInputStream zipInput = new ZipInputStream(new FileInputStream(args[1]));
Map<String, ByteArrayOutputStream> zipFiles = new HashMap<>();
ZipEntry zipEntry = zipInput.getNextEntry();
while (zipEntry != null) {
ByteArrayOutputStream byteArrayOutput = new ByteArrayOutputStream();
for (int i = zipInput.read(); i != -1 ; i = zipInput.read()) {
byteArrayOutput.write(i);
}
zipFiles.put(zipEntry.getName(), byteArrayOutput);
zipInput.closeEntry();
zipEntry = zipInput.getNextEntry();
}
String fileName = args[0].substring(args[0].lastIndexOf('\\') + 1);
zipFiles.keySet().removeIf(e -> e.equals(fileName));
ZipOutputStream zipOutput = new ZipOutputStream(new FileOutputStream(args[1]));
for (Map.Entry<String, ByteArrayOutputStream> entry : zipFiles.entrySet()) {
zipOutput.putNextEntry(new ZipEntry(entry.getKey()));
entry.getValue().writeTo(zipOutput);
entry.getValue().close();
zipOutput.closeEntry();
}
Path filePath = Paths.get(args[0]);
zipEntry = new ZipEntry("new/" + filePath.getFileName().toString());
zipOutput.putNextEntry(zipEntry);
Files.copy(filePath, zipOutput);
zipOutput.closeEntry();
zipInput.close();
zipOutput.close();
}
}