Как создать 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();
}
URL должен вернуть zip-файл. В противном случае вы должны взять один за другим и создать почтовый индекс с помощью вашей программы