java把多个文件压缩成压缩包,并且返回流 - 关心

时间:2024-03-02 20:52:59

/**
  * 方法描述:<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;

 }