如何在Java中利用zip实现压缩和解压缩

  介绍

这篇文章主要介绍了如何在Java中利用zip实现压缩和解压缩,小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随小编来看看吧!

Java是什么

Java是一门面向对象编程语言,可以编写桌面应用程序,网络应用程序,分布式系统和嵌入式系统应用程序。

zip压缩

待压缩文件目录结构:

如何在Java中利用zip实现压缩和解压缩

每个邮政文件项都要对应一个ZipEntry,然后通过ZipOutputStream的putNextEntry方法开始写入一个新的zip文件项,将文件数据发送到zip输出流中,完成后再调用closeEntry方法。

@Test   public  void  testCompressByZip (), {   try  (//指定压缩完成后邮政文件的存储路径   ZipOutputStream  ZipOutputStream =, new  ZipOutputStream (new  FileOutputStream (“F: \ \ myFavorites.zip"))   )   {//待压缩文件/目录所在的目录   File  fileFolder =, new 文件(“F: \ \我的收藏“);//获取目录下的所有文件   文件[],files =, fileFolder.listFiles ();      ZipEntry  zipEntry;   中byteArray, byte [],   int 兰;//遍历目录下的所有文件/目录,并将它们添加到压缩文件中   for  (File  File :文件),{//一个ZipEntry对应压缩文件中的一项   时间=zipEntry  new  ZipEntry (file.getName ());   zipOutputStream.putNextEntry (zipEntry);   try  (FileInputStream =拷贝,new  FileInputStream(文件),{   时间=byteArray  new 字节[1024];   while  ((len =, in.read(中byteArray)), !=, 1), {   zipOutputStream.write(中byteArray, 0,, len);   }   },catch  (IOException 交货),{   ex.printStackTrace ();   }   zipOutputStream.closeEntry ();   }   },catch  (IOException 交货),{   ex.printStackTrace ();   }   }

压缩结果:

如何在Java中利用zip实现压缩和解压缩

zip解压缩

遍历zip文件中的所有项,并获取对应项的输入流,然后通过FileOutputStream输出到指定目录中。

@Test   public  void  testDecompressByZip (), {   try  (//指定需要解压缩的zip文件   ZipInputStream  ZipInputStream =, new  ZipInputStream (new  FileInputStream (“F: \ \ myFavorites.zip"))   )   {   ZipEntry  zipEntry;   中byteArray, byte [],   int 兰;//遍历zip文件中的所有项,并逐个解压到指定的目录中   while  ((zipEntry =, zipInputStream.getNextEntry ()), !=, null), {   时间=try  (FileOutputStream  FileOutputStream  new  FileOutputStream (“F: \ \我的解压目录\ \“,+,zipEntry.getName ())), {   时间=byteArray  new 字节[1024];   while  ((len =, zipInputStream.read(中byteArray)), !=, 1), {   fileOutputStream.write(中byteArray, 0,, len);   }   },catch  (IOException 交货),{   ex.printStackTrace ();   }   }   },catch  (IOException 交货),{   ex.printStackTrace ();   }   }

解压缩结果:

如何在Java中利用zip实现压缩和解压缩

使用文件系统解压缩

<李>

建立一个文件系统,包含邮政文件中的所有项。

<李>

遍历zip文件中的所有项,通过文件访问器SimpleFileVisitor将每个项复制到指定目录中。

@Test   public  void  testDecompressByZip2 () {   try  {//将压缩文件作为一个文件系统访问   FileSystem  FileSystem =, FileSystems.newFileSystem (Paths.get (“F: \ \ myFavorites.zip"),, null);//遍历压缩文件中的内容,并使用文件访问器访问所有内容   Files.walkFileTree (fileSystem.getPath (“/?, new  SimpleFileVisitor (), {   @Override   public  FileVisitResult  visitFile (Path 文件,,BasicFileAttributes  attrs), throws  IOException  {   System.out.println(“访问目录中文件时调用“);//将文件解压到指定目录   Files.copy(文件,new  FileOutputStream (“F: \ \我的解压目录\ \“,+,file.getName (file.getNameCount(),安康;1)));   return  FileVisitResult.CONTINUE;   }      @Override   public  FileVisitResult  preVisitDirectory (Path  dir, BasicFileAttributes  attrs), throws  IOException  {   System.out.println(“访问目录中文件之前调用“);   return  FileVisitResult.CONTINUE;   }      @Override   public  FileVisitResult  visitFileFailed (Path 文件,,IOException  exc), throws  IOException  {   System.out.println(“访问目录中文件失败时调用“);   return  FileVisitResult.SKIP_SUBTREE;   }      @Override   public  FileVisitResult  postVisitDirectory (Path  dir, IOException  exc), throws  IOException  {   System.out.println(“访问目录中的文件及其所有后代之后调用“);   return  FileVisitResult.CONTINUE;   }   });   },catch  (IOException 交货),{   ex.printStackTrace ();   }   }

如何在Java中利用zip实现压缩和解压缩