У меня есть SequenceInputStream, в котором находятся 3 FileInputStream-а. Каждый из них открыт для zip папки, в которой лежит текстовый файл. Мне нужно последовательно прочитать все 3 архива и записать результат в файл. Но почему-то метод getNextEntry() у ZipInputStream возвращает null после прочтения первого архива.
ArrayList<String> files = new ArrayList<>();
ArrayList<InputStream> streams = new ArrayList<>();
files.add("C:/temp/file1.zip");
files.add("C:/temp/file2.zip");
files.add("C:/temp/file3.zip");
String resultFile = "C:/temp/result.txt";
Collections.sort(files);
for (String file : files) streams.add(new FileInputStream(file));
ZipInputStream zip = new ZipInputStream(new SequenceInputStream(Collections.enumeration(streams)));
while (true) {
ZipEntry entry = zip.getNextEntry();
if (entry == null) break;
System.out.println(entry.getName());
try (OutputStream os = new BufferedOutputStream(new FileOutputStream(resultFile))) {
final int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
for (int readBytes; (readBytes = zip.read(buffer, 0, bufferSize)) > -1; ) {
os.write(buffer, 0, readBytes);
}
os.flush();
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей