Java中zip的压缩和解压缩的实现代码
在Java中可以使用ZipOutputStream和ZipInputStream来实现zip的压缩和解压缩操作,另外使用FileSystem也可以用来实现zip的解压缩,下面将介绍这几种方式,直接上代码。
zip压缩
待压缩文件目录结构:
每个zip文件项都要对应一个ZipEntry,然后通过ZipOutputStream的putNextEntry方法开始写入一个新的zip文件项,将文件数据发送到zip输出流中,完成后再调用closeEntry方法。
@Test publicvoidtestCompressByZip(){ try( //指定压缩完成后zip文件的存储路径 ZipOutputStreamzipOutputStream=newZipOutputStream(newFileOutputStream("F:\\myFavorites.zip")) ) { //待压缩文件/目录所在的目录 FilefileFolder=newFile("F:\\我的收藏"); //获取目录下的所有文件 File[]files=fileFolder.listFiles(); ZipEntryzipEntry; byte[]byteArray; intlen; //遍历目录下的所有文件/目录,并将它们添加到压缩文件中 for(Filefile:files){ //一个ZipEntry对应压缩文件中的一项 zipEntry=newZipEntry(file.getName()); zipOutputStream.putNextEntry(zipEntry); try(FileInputStreamin=newFileInputStream(file)){ byteArray=newbyte[1024]; while((len=in.read(byteArray))!=-1){ zipOutputStream.write(byteArray,0,len); } }catch(IOExceptionex){ ex.printStackTrace(); } zipOutputStream.closeEntry(); } }catch(IOExceptionex){ ex.printStackTrace(); } }
压缩结果:
zip解压缩
遍历zip文件中的所有项,并获取对应项的输入流,然后通过FileOutputStream输出到指定目录中。
@Test publicvoidtestDecompressByZip(){ try( //指定需要解压缩的zip文件 ZipInputStreamzipInputStream=newZipInputStream(newFileInputStream("F:\\myFavorites.zip")) ) { ZipEntryzipEntry; byte[]byteArray; intlen; //遍历zip文件中的所有项,并逐个解压到指定的目录中 while((zipEntry=zipInputStream.getNextEntry())!=null){ try(FileOutputStreamfileOutputStream=newFileOutputStream("F:\\我的解压目录\\"+zipEntry.getName())){ byteArray=newbyte[1024]; while((len=zipInputStream.read(byteArray))!=-1){ fileOutputStream.write(byteArray,0,len); } }catch(IOExceptionex){ ex.printStackTrace(); } } }catch(IOExceptionex){ ex.printStackTrace(); } }
解压缩结果:
使用FileSystem解压缩
- 建立一个文件系统,包含zip文件中的所有项。
- 遍历zip文件中的所有项,通过文件访问器SimpleFileVisitor将每个项复制到指定目录中。
@Test publicvoidtestDecompressByZip2(){ try{ //将压缩文件作为一个文件系统访问 FileSystemfileSystem=FileSystems.newFileSystem(Paths.get("F:\\myFavorites.zip"),null); //遍历压缩文件中的内容,并使用文件访问器访问所有内容 Files.walkFileTree(fileSystem.getPath("/"),newSimpleFileVisitor(){ @Override publicFileVisitResultvisitFile(Pathfile,BasicFileAttributesattrs)throwsIOException{ System.out.println("访问目录中文件时调用"); //将文件解压到指定目录 Files.copy(file,newFileOutputStream("F:\\我的解压目录\\"+file.getName(file.getNameCount()-1))); returnFileVisitResult.CONTINUE; } @Override publicFileVisitResultpreVisitDirectory(Pathdir,BasicFileAttributesattrs)throwsIOException{ System.out.println("访问目录中文件之前调用"); returnFileVisitResult.CONTINUE; } @Override publicFileVisitResultvisitFileFailed(Pathfile,IOExceptionexc)throwsIOException{ System.out.println("访问目录中文件失败时调用"); returnFileVisitResult.SKIP_SUBTREE; } @Override publicFileVisitResultpostVisitDirectory(Pathdir,IOExceptionexc)throwsIOException{ System.out.println("访问目录中的文件及其所有后代之后调用"); returnFileVisitResult.CONTINUE; } }); }catch(IOExceptionex){ ex.printStackTrace(); } }
到此这篇关于Java中zip的压缩和解压缩的实现代码的文章就介绍到这了,更多相关javazip压缩和解压缩内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。