Собственно на практике всё работает. Ругается на метод readAllBytes() из 28й строки. Это вообще нормально?
OMG! Не долго думая вставил реализацию метода из интерфейса java.io.inputstream, но теперь валик требует чтоб я по другому всё сделал... закрываю вопрос и иду биться головой о валик.
OMG!!!x2 - Эта сволочь не принимает try with resources!!!
package com.javarush.task.task31.task3105;
import java.io.IOException;
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;
/*
Добавление файла в архив
*/
public class Solution {
public static void main(String[] args) throws IOException {
Path fileToAdd = Paths.get(args[0]);
Path zipFile = Paths.get(args[1]);
//
// Path fileToAdd = Paths.get("H:/img.bmp");
// Path zipFile = Paths.get("H:/H.zip");
Map<ZipEntry, byte[]> entries = new HashMap<>();
try (ZipInputStream zis = new ZipInputStream(Files.newInputStream(zipFile))){
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null){
entries.put(entry, zis.readAllBytes());
}
}
try (ZipOutputStream zos = new ZipOutputStream(Files.newOutputStream(zipFile))){
for (Map.Entry<ZipEntry, byte[]> pair : entries.entrySet()) {
zos.putNextEntry(pair.getKey());
zos.write(pair.getValue());
zos.closeEntry();
}
ZipEntry entry = new ZipEntry("new/" + fileToAdd.getFileName());
zos.putNextEntry(entry);
byte[] buffer = Files.readAllBytes(fileToAdd);
zos.write(buffer);
zos.closeEntry();
}
}
}