本教程操作环境:windows7系统、java10版,DELL G3电脑。
1、ZIP文件格式
[localfileheader+filedata+datadescriptor]{1,n}+centraldirectory+endofcentraldirectoryrecord 即 [文件头+文件数据+数据描述符]{此处可重复n次}+核心目录+目录结束标识 当压缩包中有多个文件时,就会有多个[文件头+文件数据+数据描述符]
2、压缩和下载步骤
(1)创建压缩包前准备
//定义压缩包存在服务器的路径 Stringpath=request.getSession().getServletContext().getRealPath("/WEB-INF/fileTemp"); //创建路径 FileFilePath=newFile(path+"/file"); if(!FilePath.exists()){ FilePath.mkdir(); } Stringpath=FilePath.getPath()+"/"; //定义导出压缩包的名称 Stringtitle="问价压缩包"; //压缩包格式 StringfileNamezip=title+".zip"; StringzipPath=path+fileNamezip; //创建一个ZIP输出流并实例化缓冲区域 ZipOutputStreamout=newZipOutputStream(newBufferedOutputStream(newFileOutputStream(zipPath))); //设置编码格式(解决linux出现乱码) out.setEncoding("gbk"); //定义字节数组 bytedata[]=newbyte[2048]; //获取文件记录(获取文件记录代码省略) ListFileList=。。。; if(!FileList.isEmpty()){ ExportUtilutil=newExportUtil(title,title, request,response,FilePath.getPath()); }
(2)删除压缩包之前的数据,创建压缩包
util.startZip(FilePath.getPath());
(3)循环将需要压缩的文件放到压缩包中
for(inti=0;i<FileList.size();i++){ fileVofileVo=FileList.get(i); export(fileVo,request,response,title,FilePath.getPath(),fileName); } ------ publicvoidexport(fileVofileVo,HttpServletRequestrequest, HttpServletResponseresponse,Stringtitle,Stringpath,StringfileName){ FileOutputStreamfileOutputStream=null; try{ FiledirFile=null; inti=fileVo.getName().lastIndexOf("."); if(i!=-1){//存在文件类型 fileName1=fileName1+"."+(fileVo.getName()).substring(i+1); } booleanbFile=false; StringmkdirName=path+File.separatorChar+title; dirFile=newFile(mkdirName); if(!dirFile.exists()){ dirFile.getParentFile().mkdirs(); } if(dirFile.isDirectory()){ path=mkdirName+File.separatorChar+fileName1; }else{ bFile=dirFile.mkdirs(); } if(bFile){ path=mkdirName+File.separatorChar+fileName1; } fileOutputStream=newFileOutputStream(path.replace("*","")); StringfileName=URLEncoder.encode(fileName1,"UTF-8"); if(fileName.length()>110){ fileName=newString(fileName1.getBytes("gb2312"),"ISO8859-1"); } response.setHeader("Connection","close"); response.setHeader("Content-Type","application/octet-stream"); response.setContentType("application/x-msdownload"); response.setHeader("Content-Disposition","attachment;filename=\"" +Utf8Util.toUtf8String(fileName)+"\""); //读取文件流输出到到另一个位置 fileVo.getFileIo(fileOutputStream); fileOutputStream.close(); }catch(Exceptione){ logger.error("异常:原因如下"+e.getMessage(),e); }finally{ try{ if(fileOutputStream!=null){ fileOutputStream.close(); } }catch(IOExceptione1){ //TODOAuto-generatedcatchblock logger.error("异常:原因如下"+e1.getMessage(),e1); } } } ------
(4)压缩完成,关闭输出流。
util.entdZip(FilePath.getPath());原文来自:https://www.py.cn
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容