【问题标题】:How to create ZIP files using list of Input streams?如何使用输入流列表创建 ZIP 文件?
【发布时间】:2013-08-27 08:34:24
【问题描述】:

就我而言,我必须从我的网络应用程序的资源文件夹中下载图像。现在我正在使用以下代码通过 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 文件。 我不太了解序列输入流和压缩输入流的使用,所以如果可以通过这些,请告诉我。

【问题讨论】:

  • 那么您是在问如何下载 //resources//WebFiles//images// 中的所有图像并将它们压缩到一个 zip 文件中吗? imgPath 是如何分配的?
  • 我已经有 imgPath。在我的情况下,我有位于 //resources//WebFiles//images 的图像路径列表。我必须一次通过 URL 下载所有这些图像。
  • 难道你不能只是一个 ZipOuputStream docs.oracle.com/javase/6/docs/api/java/util/zip/… 并通过循环遍历每个图像来执行类似于 examples.javacodegeeks.com/core-java/util/zip/… 的操作吗?
  • 感谢您的努力,但我已经完成了该示例。它的用处高达 70%。这里他们使用了文件的物理路径,但在我的情况下,我没有物理路径。我只在broser上渲染了图像。

标签: java spring-mvc inputstream zipinputstream


【解决方案1】:

我认为您能够做到这一点的唯一方法是:

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

【讨论】:

  • @amitsingh 很高兴,很高兴我能提供帮助。
【解决方案2】:

网址应返回 zip 文件。否则,您必须一个一个地使用您的程序创建一个 zip

【讨论】:

  • 能否详细解释一下
  • 您可以制作文件列表。然后,创建一个 zip 文件。遍历列表并将每个文件写入该 zip。你可以参考这个来创建 zipfile。 stackoverflow.com/questions/1091788/…
猜你喜欢
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
相关资源
最近更新 更多