Java多文件以ZIP压缩包导出的实现方法
本文实例为大家分享了Java多文件以ZIP压缩包导出的具体代码,供大家参考,具体内容如下
1、使用java实现吧服务器的图片打包成一个zip格式的压缩包导出,多个文件打包导出。
2、代码如下:
**ImageByteUtil.java**
publicclassImageByteUtil{ privatestaticfloatQUALITY=0.6f; publicstaticvoidcompressZip(Listlistfiles,OutputStreamoutput,Stringencode,booleancompress,Stringalias){ ZipOutputStreamzipStream=null; try{ zipStream=newZipOutputStream(output); for(Filefile:listfiles){ compressZip(file,zipStream,compress,alias+"_"+(listfiles.indexOf(file)+1)); } }catch(Exceptione){ e.printStackTrace(); }finally{ try{ if(zipStream!=null){ zipStream.close(); } }catch(IOExceptione){ e.printStackTrace(); } } } privatestaticvoidcompressZip(Filefile,ZipOutputStreamzipStream, booleancompress,Stringalias)throwsException{ FileInputStreaminput=null; try{ input=newFileInputStream(file); //zip(input,zipStream,file.getName(),compress); zip(input,zipStream,alias+"."+file.getName().substring(file.getName().lastIndexOf(".")+1),compress); }catch(Exceptione){ e.printStackTrace(); }finally{ try{ if(input!=null) input.close(); }catch(IOExceptione){ e.printStackTrace(); } } } privatestaticvoidzip(InputStreaminput,ZipOutputStreamzipStream, StringzipEntryName,booleancompress)throwsException{ byte[]bytes=null; BufferedInputStreambufferStream=null; try{ if(input==null) thrownewException("获取压缩的数据项失败!数据项名为:"+zipEntryName); //压缩条目不是具体独立的文件,而是压缩包文件列表中的列表项,称为条目,就像索引一样 ZipEntryzipEntry=newZipEntry("图片/"+zipEntryName); //定位到该压缩条目位置,开始写入文件到压缩包中 zipStream.putNextEntry(zipEntry); if(compress){ bytes=ImageByteUtil.compressOfQuality(input,0); zipStream.write(bytes,0,bytes.length); }else{ bytes=newbyte[1024*5];//读写缓冲区 bufferStream=newBufferedInputStream(input);//输入缓冲流 intread=0; while((read=bufferStream.read(bytes))!=-1){ zipStream.write(bytes,0,read); } } }catch(IOExceptione){ e.printStackTrace(); }finally{ try{ if(null!=bufferStream) bufferStream.close(); }catch(IOExceptione){ e.printStackTrace(); } } } publicstaticbyte[]compressOfQuality(Filefile,floatquality)throwsException{ byte[]bs=null; InputStreaminput=null; try{ input=newFileInputStream(file); bs=compressOfQuality(input,quality); }catch(Exceptione){ e.printStackTrace(); }finally{ try{ if(input!=null) input.close(); }catch(IOExceptione){ e.printStackTrace(); } } returnbs; } publicstaticbyte[]compressOfQuality(InputStreaminput,floatquality) throwsException{ ByteArrayOutputStreamoutput=null; try{ output=newByteArrayOutputStream(); if(quality==0){ Thumbnails.of(input).scale(1f).outputQuality(QUALITY) .toOutputStream(output); }else{ Thumbnails.of(input).scale(1f).outputQuality(quality).toOutputStream(output); } returnoutput.toByteArray(); }catch(Exceptione){ e.printStackTrace(); }finally{ try{ if(output!=null) output.close(); }catch(IOExceptione){ e.printStackTrace(); } } returnnull; } }
**Main.java**
publicstaticvoidmain(String[]args){ //要导出的文件集合,添加自己需要导出的文件 ListListFiles=newArrayList<>(); //调用工具类,参数说明(需要导出的文件集,ByteArrayOutputStream对象,编码,是否压缩【true,false】,文件名称前缀) ImageByteUtil.compressZip(ListFiles,out,"UTF-8",false,"LWJ"); //指定导出格式 ReturnContext.addParam("exportFileName","extFile.zip"); ReturnContext.addParam("mimeType","zip"); returnin; }
3、此功能是根据在开发过程中项目需要实现的,测试可正常使用,可更改定制。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。