Код рабочий, валидатор красный по всем пунктам. Что не так? Наверное, это уже вопрос к разработчикам курса. Неужели нельзя пересмотреть валидацию??? Это уже становится неинтересным - писать код в угоду валидатору, при этом не понимая что ему нужно. Разработчики, аууууууу...
package com.javarush.task.task31.task3105;
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
/*
Добавление файла в архив
*/
public class Solution {
public static void main(String[] args) {
String inputFile=args[0];
String outputFile=args[1];
byte [] buffer=new byte[1024];
// String inputFile="D:/MyDownloads/abc.mp3";
// String outputFile="D:/MyDownloads/secretPasswords.zip";
Map<String,ByteArrayOutputStream> zipEntryMap=new HashMap<>();
try(ZipInputStream zipInputStream=new ZipInputStream(new BufferedInputStream(new FileInputStream(outputFile)))){
ZipEntry zipEntry;
ByteArrayOutputStream byteArrayOutputStream;
while ((zipEntry=zipInputStream.getNextEntry())!=null){
byteArrayOutputStream=new ByteArrayOutputStream();
int length;
while ((length=zipInputStream.read(buffer))>0) {
byteArrayOutputStream.write(buffer,0,length);
}
zipEntryMap.put(zipEntry.getName(),byteArrayOutputStream);
byteArrayOutputStream.close();
}
}catch (IOException e){
e.printStackTrace();
}
ZipEntry zipEntry=new ZipEntry("new"+inputFile.substring(inputFile.lastIndexOf('/')));
try(ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream()){
byteArrayOutputStream.write(Files.readAllBytes(Paths.get(inputFile)));
zipEntryMap.remove(zipEntry.getName());
zipEntryMap.put(zipEntry.getName(),byteArrayOutputStream);
}catch (IOException e){
e.printStackTrace();
}
try(ZipOutputStream zipOutputStream=new ZipOutputStream(new FileOutputStream(outputFile),Charset.defaultCharset())){
for (Map.Entry <String, ByteArrayOutputStream> entry : zipEntryMap.entrySet()) {
zipOutputStream.putNextEntry(new ZipEntry(entry.getKey()));
entry.getValue().writeTo(zipOutputStream); }
}catch (IOException e){
e.printStackTrace();
}
}
}