Запись изображения в ZIP архив Java

Имеется код

try(ZipOutputStream zout = new ZipOutputStream(new FileOutputStream(".\\output.zip"));
        FileInputStream fis = new FileInputStream("https://static9.depositphotos.com/1594308/1110/i/600/depositphotos_11107478-stock-photo-fantasy.jpg")){
        ZipEntry entry1 = new ZipEntry("image.jpg");
        zout.putNextEntry(entry1);
        // считываем содержимое файла в массив byte
        byte[] buffer = new byte[fis.available()];
        fis.read(buffer);
        // добавляем содержимое к архиву
        zout.write(buffer);
        // закрываем текущую запись для новой записи
        zout.closeEntry();
    }

Необходимо загрузить изображение(известен ее URL адрес) в архив. В потоковых классах пока что не очень шарю. Не понимаю логику загрузки изображения.


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

Автор решения: Дмитрий

Вы были близки к истине, только FileInputStream не предназначен для скачивания по урлу. Попробуйте так:

import java.io.*;
import java.net.URL;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Main {
    
    public static void main(String[] args) throws IOException {
        String FILE_URL = "https://static9.depositphotos.com/1594308/1110/i/600/depositphotos_11107478-stock-photo-fantasy.jpg";        
        downloadToZip(FILE_URL, "output.zip", "image.jpg");        
    }

    public static void downloadToZip (String fileUrl, String targetName, String targetFileName) throws IOException {
        try (ZipOutputStream zout = new ZipOutputStream(new FileOutputStream(targetName));
                InputStream is = new BufferedInputStream(new URL(fileUrl).openStream())) {
            zout.putNextEntry(new ZipEntry(targetFileName));
            copy(is, zout);
            zout.closeEntry();
        }
    }

    private static void copy(InputStream source, OutputStream target) throws IOException {
        byte[] buf = new byte[1024];
        int length;
        while ((length = source.read(buf)) > 0) target.write(buf, 0, length);
    }

}
→ Ссылка