В чем проблема?
Четвертый пункт не проходит.
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
/*
Добавление файла в архив
*/
public class Solution {
public static HashMap<ZipEntry, ByteArrayOutputStream> hashMap = new HashMap<>();
public static void main(String[] args) throws IOException {
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(args[1]));
while (true){
ZipEntry temp = zipInputStream.getNextEntry();
if(temp==null)break;
if(temp.getName().equals("new/" + Paths.get(args[0]).getFileName()))continue;
if(!temp.isDirectory()) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[8 * 1024];
int len;
while ((len = zipInputStream.read(buffer)) > 0) {
byteArrayOutputStream.write(buffer, 0, len);
}
hashMap.put(temp,byteArrayOutputStream);
byteArrayOutputStream.close();
}else hashMap.put(temp,null);
}
zipInputStream.close();
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(args[1]));
zos.putNextEntry(new ZipEntry("new/" + Paths.get(args[0]).getFileName()));
Files.copy(Paths.get(args[0]),zos);
zos.closeEntry();
for (Map.Entry<ZipEntry,ByteArrayOutputStream> pair:hashMap.entrySet()) {
zos.putNextEntry(pair.getKey());
if(!pair.getKey().isDirectory()){
zos.write(pair.getValue().toByteArray());
zos.flush();
}
}
zos.close();
}
}
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.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
/*
Добавление файла в архив
*/
public class Solution {
public static HashMap<ZipEntry, ByteArrayOutputStream> hashMap = new HashMap<>();
public static void main(String[] args) throws IOException {
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(args[1]));
while (true) {
ZipEntry temp = zipInputStream.getNextEntry();
if (temp == null) break;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[8 * 1024];
int len;
while ((len = zipInputStream.read(buffer)) > 0) {
byteArrayOutputStream.write(buffer, 0, len);
}
byteArrayOutputStream.flush();
hashMap.put(temp, byteArrayOutputStream);
byteArrayOutputStream.close();
zipInputStream.closeEntry();
}
zipInputStream.close();
ZipEntry zipEntry = null;
for (Map.Entry<ZipEntry, ByteArrayOutputStream> pair : hashMap.entrySet()) {
if (pair.getKey().isDirectory()) continue;
if (Paths.get(pair.getKey().getName()).getFileName().equals(Paths.get(args[0]).getFileName()))
zipEntry = pair.getKey();
}
ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(args[1]));
if (zipEntry == null) {
zipOutputStream.putNextEntry(new ZipEntry("new/" + Paths.get(args[0]).getFileName()));
Files.copy(Paths.get(args[0]), zipOutputStream);
} else {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byteArrayOutputStream.flush();
Files.copy(Paths.get(args[0]), byteArrayOutputStream);
byteArrayOutputStream.close();
hashMap.put(zipEntry, byteArrayOutputStream);
}
for (Map.Entry<ZipEntry, ByteArrayOutputStream> pair : hashMap.entrySet()) {
zipOutputStream.putNextEntry(pair.getKey());
zipOutputStream.write(pair.getValue().toByteArray());
zipOutputStream.flush();
}
zipOutputStream.close();
}
}