批量下载_Zip压缩包的方式

来源:互联网 发布:淘宝 流量被限制 编辑:程序博客网 时间:2024/04/30 08:10

一、说明

对于文件批量下载一般有两种方式,单个循环和zip压缩包的方式,第一种方式可能会因不同的浏览器有不同的效果,此处指讨论第二种方式。

下文注释中提到的apache的zip打包api在ant包中,但这个jar包将近1M着实有点大。

<dependency><groupId>ant</groupId><artifactId>ant</artifactId><version>1.6.5</version></dependency>

二、示例程序

package tt;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;public class Test {public static void main(String[] args) {Test ts =  new Test();ts.zipFile();}public void zipFile() {try {//ByteArrayOutputStream bytyOut = new ByteArrayOutputStream();FileOutputStream fileOut = new FileOutputStream("d:\\zip.zip");ZipOutputStream zipOut = new ZipOutputStream(fileOut);//bytyOutFile[] selectedFiles = { new File("d:\\aa.txt"), new File("d:\\bb.txt") };byte[] buffer = new byte[1024];for (File file : selectedFiles) {FileInputStream fileIn = new FileInputStream(file);if (fileIn != null) {//注意:此处的文件名如果为中文,在不同编码的环境下可能会出现文件名乱码的问题,//建议使用apache的zip功能,不要使用jdk(我的是1.6)自带的zipOut.putNextEntry(new ZipEntry(file.getName()));int len;// 读入需要下载的文件的内容,打包到zip文件while ((len = fileIn.read(buffer)) > 0) {zipOut.write(buffer, 0, len);}zipOut.closeEntry();fileIn.close();}}zipOut.close();fileOut.flush();fileOut.close();//byte[] data = bytyOut.toByteArray();//ByteArrayInputStream byteIn = new ByteArrayInputStream(data);} catch (Exception e) {e.printStackTrace();}}}