/**
* 方法描述:<b>测试类</b></br>
* 备 注: </br>
* 创 建 人: </br>
* 创建日期: </br>
*/
public class TestFileStream{
//文件和压缩包存储的位置
String tempFilePath="C:/temp/"
List<String> fileList=new ArrayList<String>();
fileList.add(tempFilePath+"file1.txt");
fileList.add(tempFilePath+"file2.png");
fileList.add(tempFilePath+"file3.xls");
//生成的压缩包名称
String zipName="fileData";
//返回流
ByteArrayOutputStream outputStream=fileToZip(fileList,fileData,tempFilePath);
//页面输入压缩包流
byte[] buffer=outputStream.toByteArray();
//清空response
response.reset();
//设置response的Header
response.addHeader("Content-Disposition",
"attachment;filename="+
new String(("dataFile.zip").getBytes("gb2312"),"ISO8859-1"));
response.addHeader("Content-Length", ""+outputStream.size());
toClient=new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
}
/**
* 方法描述:<b>将多个文件压缩成 zip包</b></br>
* 备 注: </br>
* 创 建 人: </br>
* 创建日期: </br>
* @param fileList
*/
public ByteArrayOutputStream fileToZip(List<String> fileList,String zipName,String tempFilePath){
byte[] buffer=new byte[1024];
ZipOutputStream out=null;
try{
out=new ZipOutputStream(new FileOutputStream(tempFilePath+zipName+".zip"));
List<File> filedata=new ArrayList<File>();
for(int i=0,len=fileList.size();i<len;i++ )
{
filedata.add(new File(fileList.get(i)));
}
for(int j=0,len=filedata.size();j<len;j++)
{
FileInputStream fis=new FileInputStream(filedata.get(j));
out.putNextEntry(new ZipEntry(filedata.get(j).getName()));
int dataLen;
//读入需要下载的文件的内容,打包到zip文件
while((dataLen=fis.read(buffer))>0){
out.write(buffer,0,dataLen);
}
out.closeEntry();
fis.close();
}
out.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
//读取压缩包
File filezip=new File(tempFilePath+zipName+".zip");
ByteArrayOutputStream baos=null;
try
{
baos=new ByteArrayOutputStream();
FileInputStream inStream=new FileInputStream(filezip);
BufferedInputStream bis=new BufferedInputStream(inStream);
int c=bis.read();
while(c!=-1){
baos.write(c);
c=bis.read();
}
bis.close();
inStream.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
return baos;
}