Здравствуйте. Программа извлекает файлы из Zip-файла в HashMap и при добавление нового файла записывает их обратно. Тестировал на текстовых файлах. Проблема заключается в том, что содержание файлов (кроме нового) теряется. Подскажите как это исправить? Буду благодарен в двойне если дадите ссылочку на данный материал)
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.*;
/*
Добавление файла в архив
*/
public class Solution {
public static void main(String[] args) throws IOException {
Path file = Paths.get(args[0]);
ZipFile zipFile = new ZipFile(args[1]);
HashMap<ZipEntry, ByteArrayOutputStream> hashMap = new HashMap<>();
byte[] buffer = new byte[1024];
try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFile.getName()))) {
ZipEntry entry = zipInputStream.getNextEntry();
while (entry != null) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int length;
while ((length = zipInputStream.read(buffer)) > 0)
byteArrayOutputStream.write(length);
byteArrayOutputStream.close();
hashMap.put(entry, byteArrayOutputStream);
entry = zipInputStream.getNextEntry();
}
}
try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFile.getName()))) {
ZipEntry zipEntry = new ZipEntry("new/" + file.getFileName().toString());
for (Map.Entry<ZipEntry, ByteArrayOutputStream> pair : hashMap.entrySet()) {
String name = pair.getKey().getName();
String fileFormat = name.substring(name.lastIndexOf("."));
if (!pair.getKey().getName().equals(zipEntry.getName())) {
Path path = Files.createTempFile("tmp", fileFormat);
FileOutputStream fos = new FileOutputStream(path.toFile());
fos.write(pair.getValue().toByteArray());
fos.close();
zipOutputStream.putNextEntry(new ZipEntry(pair.getKey().getName()));
Files.copy(path, zipOutputStream);
}
}
zipOutputStream.putNextEntry(new ZipEntry("new/" + file.getFileName().toString()));
Files.copy(file,zipOutputStream);
}
}
}