一、說明
對於文件批量下載一般有兩種方式,單個循環和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);//bytyOut
File[] 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();
}
}
}