Не пойму,что не так.
Игрался с закрытием потоков,не нашёл удовлетворяющего валик.
Help
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;
import java.util.TreeMap;
/*
Добавление файла в архив
*/
public class Solution {
public static void main(String[] args) throws IOException {
String filePath = args[0];
String zipPath = args[1];
ZipInputStream zipRead = new ZipInputStream(new FileInputStream(zipPath));
Map<String, ByteArrayOutputStream> tempMap = new TreeMap<>();
ZipEntry zipEntry;
while ((zipEntry = zipRead.getNextEntry()) != null) {
if(filePath.contains(zipEntry.getName())){
continue;
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
copyData(zipRead,baos);
tempMap.put(zipEntry.getName(), baos);
baos.close();
zipRead.closeEntry();
}
zipRead.close();
ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(zipPath));
Path path = Paths.get(filePath);
zip.putNextEntry(new ZipEntry("new/" + path.getFileName()));
Files.copy(path,zip);
for (Map.Entry<String,ByteArrayOutputStream> entry : tempMap.entrySet()
) {
zip.putNextEntry(new ZipEntry(entry.getKey()));
zip.write(entry.getValue().toByteArray());
zip.closeEntry();
}
zip.close();
}
private static void copyData(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[8*1024];
int len;
while ((len = in.read(buffer))>0){
out.write(buffer,0,len);
}
}
}