Запись изображения в 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);
}
}