源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

java压缩多个文件并且返回流示例

  • 时间:2020-09-03 17:23 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java压缩多个文件并且返回流示例
这个类可以压缩多个文件并且返回流,在程序中可以再操作返回的流做其它功能,比如验证MD5,下面看代码吧
[u]复制代码[/u] 代码如下:
/** * 方法描述:<b>测试类</b></br> */ public class TestFileStream{  //文件和压缩包存储的位置 StringtempFilePath="C:/temp/" List<String>fileList=newArrayList<String>(); fileList.add(tempFilePath+"file1.txt"); fileList.add(tempFilePath+"file2.png"); fileList.add(tempFilePath+"file3.xls"); //生成的压缩包名称 StringzipName="fileData"; //返回流 ByteArrayOutputStreamoutputStream=fileToZip(fileList,fileData,tempFilePath); //页面输入压缩包流 byte[]buffer=outputStream.toByteArray(); //清空response response.reset(); //设置response的Header response.addHeader("Content-Disposition", "attachment;filename="+ newString(("dataFile.zip").getBytes("gb2312"),"ISO8859-1")); response.addHeader("Content-Length",""+outputStream.size()); toClient=newBufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); toClient.write(buffer); toClient.flush(); } /** *方法描述:<b>将多个文件压缩成zip包</b></br> */ publicByteArrayOutputStreamfileToZip(List<String>fileList,StringzipName,StringtempFilePath){ byte[]buffer=newbyte[1024]; ZipOutputStreamout=null; try{ out=newZipOutputStream(newFileOutputStream(tempFilePath+zipName+".zip")); List<File>filedata=newArrayList<File>(); for(inti=0,len=fileList.size();i<len;i++) { filedata.add(newFile(fileList.get(i))); } for(intj=0,len=filedata.size();j<len;j++) { FileInputStreamfis=newFileInputStream(filedata.get(j)); out.putNextEntry(newZipEntry(filedata.get(j).getName())); intdataLen; //读入需要下载的文件的内容,打包到zip文件 while((dataLen=fis.read(buffer))>0){ out.write(buffer,0,dataLen); } out.closeEntry(); fis.close(); } out.close(); } catch(Exceptionex) { ex.printStackTrace(); } //读取压缩包 Filefilezip=newFile(tempFilePath+zipName+".zip"); ByteArrayOutputStreambaos=null; try { baos=newByteArrayOutputStream(); FileInputStreaminStream=newFileInputStream(filezip); BufferedInputStreambis=newBufferedInputStream(inStream); intc=bis.read(); while(c!=-1){ baos.write(c); c=bis.read(); } bis.close(); inStream.close(); } catch(Exceptionex) { ex.printStackTrace(); } returnbaos; }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部