package com.javarush.task.task31.task3105;
import java.io.*;
import java.nio.file.Files;
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 {
String fileName = args[0];
String zipName = args[1];
File file = new File(fileName);
Map<ZipEntry, ByteArrayOutputStream> mapEntries = new HashMap<>();
try(ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipName))){
ZipEntry zipEntry;
while (true){
zipEntry = zipInputStream.getNextEntry();
if (zipEntry == null) break;
//Если в архиве есть файл с таким именем, то м его не сохраняем.
if (zipEntry.getName().equals("new/" + file.getName())) continue;
int buffSize = 1024;
byte[] buff = new byte[buffSize];
int bites = 0;
//Создаем БайтЭррейАутпут для каждого имеющегося ЗипЭнтри
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while((bites=zipInputStream.read(buff,0,buffSize)) != -1) {
baos.write(buff,0,bites);
}
//Добавляем в мапу сочетания: ЗипЭнтри + массив его байт
mapEntries.put(zipEntry,baos);
}
try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipName))){
//создаем новый энтри (с учетом новой папки)
ZipEntry newDir = new ZipEntry("new/" + file.getName());
zipOutputStream.putNextEntry(newDir);
//Копируем в новый энтри нужный файл, он в архиве попадает в папку new.
Files.copy(file.toPath(), zipOutputStream);
//Для всех пар, с сохраненными энтри + их байтами, создаем новые ентри и пришем в них байты
for (Map.Entry<ZipEntry, ByteArrayOutputStream> entry:mapEntries.entrySet()) {
zipOutputStream.putNextEntry(entry.getKey());
entry.getValue().writeTo(zipOutputStream);
}
}
}
}
}
package com.javarush.task.task31.task3105;
import java.io.*;
import java.nio.file.Files;
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 {
String fileName = args[0];
String zipName = args[1];
File file = new File(fileName);
Map<ZipEntry, ByteArrayOutputStream> mapEntries = new HashMap<>();
try(ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipName))){
ZipEntry zipEntry;
while (true){
zipEntry = zipInputStream.getNextEntry();
if (zipEntry == null) break;
//Если в архиве есть файл с таким именем, то м его не сохраняем.
if (zipEntry.getName().equals("new/" + file.getName())) continue;
int buffSize = 1024;
byte[] buff = new byte[buffSize];
int bites = 0;
//Создаем БайтЭррейАутпут для каждого имеющегося ЗипЭнтри
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while((bites=zipInputStream.read(buff,0,buffSize)) != -1) {
baos.write(buff,0,bites);
}
//Добавляем в мапу сочетания: ЗипЭнтри + массив его байт
mapEntries.put(zipEntry,baos);
}
try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipName))){
//создаем новый энтри (с учетом новой папки)
ZipEntry newDir = new ZipEntry("new/" + file.getName());
zipOutputStream.putNextEntry(newDir);
//Копируем в новый энтри нужный файл, он в архиве попадает в папку new.
Files.copy(file.toPath(), zipOutputStream);
//Для всех пар, с сохраненными энтри + их байтами, создаем новые ентри и пришем в них байты
for (Map.Entry<ZipEntry, ByteArrayOutputStream> entry:mapEntries.entrySet()) {
zipOutputStream.putNextEntry(entry.getKey());
entry.getValue().writeTo(zipOutputStream);
}
}
}
}
}