архивировать список файлов java

List<File> files1 = new ArrayList<>(Arrays.asList(new File("rr.xml"), new File("jpeg.jpg")));
for (File file1 : files1) {
    try (ZipOutputStream zout = new ZipOutputStream(new FileOutputStream("output.zip"));
        FileInputStream fis = new FileInputStream(file1)) {
        zout.putNextEntry(new ZipEntry(file1.getName()));
        // считываем содержимое файла в массив byte
        byte[] buffer = new byte[8000];
        int count;
        while ((count = fis.read(buffer)) != -1) {
            zout.write(buffer, 0, count);
        }
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
    }
}

Как правильно архивировать список файлов в java? Этот код архивирует только 1 файл .jpg


Ответы (1 шт):

Автор решения: Alex Rudenko

В существующем коде в цикле каждый раз пересоздается результирующий файл, поэтому код создания output.zip нужно вынести за пределы цикла, в котором оставить чтение/добавление входных файлов:

List<File> inputFiles = new ArrayList<>(Arrays.asList(new File("rr.xml"), new File("jpeg.jpg")));
try (ZipOutputStream zout = new ZipOutputStream(new FileOutputStream("output.zip"))) {
    for (File file : inputFiles) {
        try (FileInputStream fis = new FileInputStream(file)) {
            zout.putNextEntry(new ZipEntry(file.getName()));
            // считываем содержимое файла в массив byte
            byte[] buffer = new byte[8000];
            int count;
            while ((count = fis.read(buffer)) != -1) {
                zout.write(buffer, 0, count);
            }
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
    }
}
→ Ссылка