Как создать ZIP файлы, используя список входных потоков?

В моем случае я должен загрузить изображения из папки ресурсов в моем веб-приложении. Прямо сейчас я использую следующий код для загрузки изображений через URL.

url = new URL(properties.getOesServerURL() + "//resources//WebFiles//images//" + imgPath);

filename = url.getFile();               

is = url.openStream();
os = new FileOutputStream(sClientPhysicalPath + "//resources//WebFiles//images//" + imgPath);

b = new byte[2048];

while ((length = is.read(b)) != -1) {
    os.write(b, 0, length);
}

Но я хочу, чтобы одна операция считала все изображения одновременно и создала для этого zip-файл. Я не знаю так много об использовании потоков ввода последовательности и потоков ввода zip, так что, если это возможно через них, пожалуйста, дайте мне знать.

2 ответа

Решение

Единственный способ, которым я вижу, что вы можете это сделать, это что-то вроде следующего:

try {

    ZipOutputStream zip = new ZipOutputStream(new FileOutputStream("C:/archive.zip"));

    //GetImgURLs() is however you get your image URLs

    for(URL imgURL : GetImgURLs()) {
        is = imgURL.openStream();
        zip.putNextEntry(new ZipEntry(imgURL.getFile()));
        int length;

        byte[] b = new byte[2048];

        while((length = is.read(b)) > 0) {
            zip.write(b, 0, length);
        }
        zip.closeEntry();
        is.close();
    }
    zip.close();
}

Ref: Пример ZipOutputStream

URL должен вернуть zip-файл. В противном случае вы должны взять один за другим и создать почтовый индекс с помощью вашей программы

Другие вопросы по тегам