Java如何实现文件压缩为zip和解压zip压缩包
导读:本文共2564.5字符,通常情况下阅读需要9分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 压缩成.zip代码如下:/***压缩成ZIP**@paramsrcDir压缩文件夹路径*@paramout压缩文件输出流*@throwsRuntimeException压缩失败会抛出运行时异常*/publicstaticvoidtoZip(StringsrcDir,OutputStreamout)throwsRuntimeException{... ...
音频解说
目录
(为您整理了一些要点),点击可以直达。压缩成.zip
代码如下:
/***压缩成ZIP**@paramsrcDir压缩文件夹路径*@paramout压缩文件输出流*@throwsRuntimeException压缩失败会抛出运行时异常*/publicstaticvoidtoZip(StringsrcDir,OutputStreamout)throwsRuntimeException{longstart=System.currentTimeMillis();ZipOutputStreamzos=null;try{zos=newZipOutputStream(out);FilesourceFile=newFile(srcDir);compress(sourceFile,zos,sourceFile.getName(),false);longend=System.currentTimeMillis();System.out.println("压缩完成,耗时:"+(end-start)+"ms");}catch(Exceptione){thrownewRuntimeException("ziperrorfromZipUtils",e);}finally{if(zos!=null){try{zos.close();}catch(IOExceptione){e.printStackTrace();}}}}/***递归压缩方法**@paramsourceFile源文件*@paramzoszip输出流*@paramname压缩后的名称*@paramKeepDirStructure是否保留原来的目录结构,true:保留目录结构;*<p>*false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)*@throwsException*/privatestaticvoidcompress(FilesourceFile,ZipOutputStreamzos,Stringname,booleanKeepDirStructure)throwsException{byte[]buf=newbyte[BUFFER_SIZE];if(sourceFile.isFile()){//向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字zos.putNextEntry(newZipEntry(name));//copy文件到zip输出流中intlen;FileInputStreamin=newFileInputStream(sourceFile);while((len=in.read(buf))!=-1){zos.write(buf,0,len);}//Completetheentryzos.closeEntry();in.close();}else{File[]listFiles=sourceFile.listFiles();if(listFiles==null||listFiles.length==0){//需要保留原来的文件结构时,需要对空文件夹进行处理if(KeepDirStructure){//空文件夹的处理zos.putNextEntry(newZipEntry(name+"/"));//没有文件,不需要文件的copyzos.closeEntry();}}else{for(Filefile:listFiles){//判断是否需要保留原来的文件结构if(KeepDirStructure){//注意:file.getName()前面需要带上父文件夹的名字加一斜杠,//不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了compress(file,zos,name+"/"+file.getName(),KeepDirStructure);}else{compress(file,zos,file.getName(),KeepDirStructure);}}}}}
测试验证代码:
/** *测试打包本地的Navicat,输出为zip文件 *@throwsException */@Testpublicvoidtest()throwsException{//Navicat路径StringinDir="E:\\developer\\Navicat";//打包后输出路径StringoutDir="E:\\developer\\NavicatZip\\Navicat.zip";OutputStreamfileOutputStream=newFileOutputStream(newFile(outDir));ZipUtils.toZip(inDir,fileOutputStream);}
打包前后的文件如下:
解压.zip
代码如下:
/***解压zip文件到指定目录*@paramfileZip*@parampath_to_dest*@throwsIOException*/publicstaticvoidreadZip(StringfileZip,Stringpath_to_dest)throwsIOException{try(FileInputStreamfis=newFileInputStream(fileZip);ZipInputStreamzis=newZipInputStream(newBufferedInputStream(fis))){ZipEntryentry;//从ZipInputStream读取每个条目,直到没有//发现更多条目,返回值为空//getNextEntry()方法。while((entry=zis.getNextEntry())!=null){System.out.println("Unzipping:"+entry.getName());intsize;byte[]buffer=newbyte[2048];FilefileOut=newFile(path_to_dest+"\\"+entry.getName());try(FileOutputStreamfos=newFileOutputStream(fileOut);BufferedOutputStreambos=newBufferedOutputStream(fos,buffer.length)){while((size=zis.read(buffer,0,buffer.length))!=-1){bos.write(buffer,0,size);}bos.flush();}}}catch(IOExceptione){e.printStackTrace();}}
测试验证代码:
/***测试解压本地zip文件*@throwsException*/@TestpublicvoidreadZip()throwsException{//解压后路径Stringpath_to_dest="E:\\developer\\NavicatUnzip";//zip文件路径StringfileZip="E:\\developer\\NavicatZip\\Navicat.zip";ZipUtils.readZip(fileZip,path_to_dest);}
解压前后的文件如下:
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:
Java如何实现文件压缩为zip和解压zip压缩包的详细内容,希望对您有所帮助,信息来源于网络。