Валидатор говорит, что "В файл записываются неверные данные". Подскажите, что я мог упустить.
И еще, почему при создании потока для файла - результата не надо использовать аппендикс true?
FileOutputStream fos = new FileOutputStream(args[0])
И что у нас является ZipEntry? В архиве понятно, что там ZipEntry - один из его внутренних файлов. А сейчас их нет, только последовательность потоков? Неужели они и являются элементами ZipEntry? А строчка:
while ((zipEntry = zis.getNextEntry()) != null)
проверяет, есть ли у нас еще потоки?package com.javarush.task.task31.task3106;
import java.io.*;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/*
Разархивируем файл
*/
public class Solution {
public static void main(String[] args) throws IOException {
Map<String, String> map = new TreeMap<>();
for (int i = 1; i < args.length; i++) {
String[] record = args[i].trim().split(".zip.");
map.put(record[1], args[i]);
}
Vector<FileInputStream> streams = new Vector<>();
for (Map.Entry<String, String> pair : map.entrySet()) {
streams.add(new FileInputStream(pair.getValue()));
}
Enumeration<FileInputStream> enumFis = streams.elements();
SequenceInputStream sis = new SequenceInputStream(enumFis);
try (ZipInputStream zis = new ZipInputStream(sis);
FileOutputStream fos = new FileOutputStream(args[0])) {
ZipEntry zipEntry;
while ((zipEntry = zis.getNextEntry()) != null) {
final int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
for (int readBytes; (readBytes = sis.read(buffer, 0, bufferSize)) > -1; ) {
fos.write(buffer, 0, readBytes);
}
fos.flush();
}
}
}
}