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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。