Сделал изменения
1 )Если честно, это даже читать трудно.
Постарался убрать все лишнее почти
2 ) Списки массивов байт.
убрал
3) Используешь вперемешку ZipInputStream и оборачивающий его BufferedInputStream...
убрал
4)Есть же ByteArrayOutputStream,
использую
5)достанешь из этого ByteArrayOutputStream готовый массив.
Программа работает но если отправляю на проверку то
Ошибка в файле com/javarush/task/task31/task3105/Solution.java в строке : 33
Не найден метод "writeBytes(byte[])" в переменной "xx"
package com.javarush.task.task31.task3105;
import java.io.*;
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 {
// args = new String[]{"Q:/filetest/lvl31/c.txt", "Q:/filetest/lvl31/test.zip"};
FileInputStream zipFile = new FileInputStream(args[1]);
ZipInputStream zin = new ZipInputStream(zipFile);
HashMap<String, byte[]> allFile = new HashMap<>();
ByteArrayOutputStream xx = new ByteArrayOutputStream();
ZipEntry entry;
entry = zin.getNextEntry();
String[] words = args[0].split("/");
int x =1024; // Размер буфера
byte[] dataBytes = new byte[x];
while (entry != null) {
int amountData = 0;
while (amountData != -1) {
amountData = zin.read(dataBytes, 0, x);
if (amountData == x) xx.writeBytes(dataBytes);
if (amountData < x && amountData>0) {
byte[] dataBytes1023 = new byte[amountData];
for (int i = 0; i < amountData; i++) dataBytes1023[i] = dataBytes[i];
xx.writeBytes(dataBytes1023); // Может быть лишним целый блок так как 0 затрутся когда тобайтеаруй сделаю
}
}
allFile.put(entry.getName(), xx.toByteArray());
entry = zin.getNextEntry();
xx.reset();
}
FileInputStream fis = new FileInputStream(args[0]);
int amountData = 0;
while (amountData != -1) {
amountData = fis.read(dataBytes, 0, x);
if (amountData == x) xx.writeBytes(dataBytes);
if (amountData < x && amountData>0) {
byte[] dataBytes1023 = new byte[amountData];
for (int i = 0; i < amountData; i++) dataBytes1023[i] = dataBytes[i];
xx.writeBytes(dataBytes1023); // Может быть лишним целый блок так как 0 затрутся когда тобайтеаруй сделаю
}
}
allFile.put("new/" + words[words.length - 1], xx.toByteArray());
ZipOutputStream zout = new ZipOutputStream(new FileOutputStream(args[1]));
for (Map.Entry<String, byte[]> pair : allFile.entrySet()) {
String key = pair.getKey(); //ключ
byte[] value = pair.getValue(); //значение
entry = new ZipEntry(key);
zout.putNextEntry(entry);
zout.write(value);
}
zout.closeEntry();
zout.close();
}
}