2013-08-24 50 views
6

在我的情況下,我必須從我的web應用程序的資源文件夾下載圖像。現在我正在使用以下代碼通過URL下載圖像。如何使用輸入流列表創建ZIP文件?

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輸入流的使用,所以如果可以通過這些,請讓我知道。

+0

所以你問如何下載//資源中的所有圖像// WebFiles //圖像//並將它們壓縮成一個zip文件? imgPath如何分配? –

+0

我已經有imgPath了。在我的情況下,我有位於//resources//WebFiles//image的圖像路徑列表。我必須一次性通過URL下載所有這些圖像。 – bajrangi

+1

難道你不能只是一個ZipOuputStream http://docs.oracle.com/javase/6/docs/api/java/util/zip/ZipOutputStream.html並做一些像這裏完成的事情http://examples.javacodegeeks .com/core-java/util/zip/create-zip-file-from-multiple-files-with-zipoutputstream /通過循環遍歷每個圖像? –

回答

6

我可以看到你能做到這一點的唯一方法是類似如下:

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(); 
} 

編號:ZipOutputStream Example

+0

是的,它的工作。謝謝你的答案。 :) – bajrangi

+0

@amitsingh這是一種樂趣,很高興我能幫上忙。 –

2

該url應該返回zip文件。否則,你必須要逐一和使用程序中創建一個zip

+0

您是否可以在一些更詳細的信息中解釋它 – bajrangi

+0

您可以製作一個文件列表。然後,創建一個zip文件。在列表中循環並將每個文件寫入該zip。你可以參考這個來創建zipfile。 http://stackoverflow.com/questions/1091788/how-to-create-a-zip-file-in-java –