java实现文件夹解压和压缩

 更新时间:2020年03月19日 08:11:43   作者:Supper猿  
这篇文章主要为大家详细介绍了java实现文件夹解压和压缩,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java实现文件夹解压和压缩的具体代码,供大家参考,具体内容如下

效果

实现多个文件以及文件夹的压缩和解压

代码分析

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class Main {
  public static void main(String[] args) throws IOException {
   //解决中文乱码
   //压缩 参数改成你自己的源文件路径和压缩后的文件路径
 //yasuo("C:\\file\\", "C:\\file.zip");
 //解压 参数改成你自己的源文件路径和解压后的文件路径
 jieya("C:\\file.zip", "C:\\file\\");
  }

 public static void jieya(String zipPath, String path) throws IOException, FileNotFoundException {
 //创建解压后的文件夹
 File pt=new File(path.substring(0,path.length()-1));
 if(!pt.exists()) {
  pt.mkdirs();
 }
 //try(resource)来保证InputStream正确关闭
 try(ZipInputStream zip=new ZipInputStream(new FileInputStream(zipPath))){
  //ZipEntry表示一个压缩文件或目录
  ZipEntry entry;
  while((entry=zip.getNextEntry())!=null) {
  String name=entry.getName();
  //压缩文件
  if(!(entry.getName().contains(File.separator))) {
   FileOutputStream file= new FileOutputStream( path+ name);
   int n=0;
   while((n=zip.read())!=-1) {
   file.write(n);
   }
  }else {
  //目录
   int index=name.lastIndexOf("\\");
   File file= new File(path+ name.substring(0,index));
   if(!file.exists()) {
   file.mkdirs();
   }
   //如果不是空目录
   if(index!=name.length()-1) {
   FileOutputStream f= new FileOutputStream( path+ name);
   int n=0;
   while((n=zip.read())!=-1) {
    f.write(n);
   }
   }
  }
  }
  zip.closeEntry();
 }
 }

 public static void yasuo(String path, String zipPath) throws IOException, FileNotFoundException {
 File zp=new File(zipPath);
 if(!zp.exists()) {
  zp.createNewFile();
 }
 
 try(ZipOutputStream zip=new ZipOutputStream(new FileOutputStream(zp))) {
   File files= new File(path);
   File[] f=files.listFiles();
   for (File file : f) {
    zipAll(zip, file,file.getName());
  }
  
   }
 }

 public static void zipAll(ZipOutputStream zip, File files,String name) throws IOException, FileNotFoundException {
 if(files.isDirectory()) {
  File[] files2=files.listFiles();
  if(files2.length==0||files2==null) {
  zip.putNextEntry(new ZipEntry(name+File.separator));
  }else{
  for (File file2 : files2) {
   if(file2.isFile()) {
   zip.putNextEntry(new ZipEntry(name+File.separator+file2.getName()));
   int n;
   FileInputStream input=new FileInputStream(file2);
   while((n=input.read())!=-1) {
    zip.write(n);
   }
   }
   else {
   zipAll(zip,file2,name+File.separator+file2.getName());
   }
  }
  }
 }else {
  zip.putNextEntry(new ZipEntry(name));
  int n;
  FileInputStream input=new FileInputStream(files);
  while ((n=input.read())!=-1) {
  zip.write(n);
  }
 }
 }
}

小结

压缩

ZipOutputStream可以把多份数据写入zip包;

解压

ZipInputStream可以读取zip格式的流;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 深入理解Java的Spring框架中的IOC容器

    深入理解Java的Spring框架中的IOC容器

    IOC(Inversion of Control,控制反转)是Spring框架的核心,负责控制对象的生命周期与关系,接下来就让我们跟随文章来深入理解Java的Spring框架中的IOC容器:
    2016-07-07
  • SpringBoot整合ShardingSphere的示例代码

    SpringBoot整合ShardingSphere的示例代码

    本文主要介绍了SpringBoot整合ShardingSphere的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Java设计模式之单例模式详解

    Java设计模式之单例模式详解

    这篇文章主要为大家详细介绍了Java设计模式之单例模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Java查看本机端口是否被占用源码

    Java查看本机端口是否被占用源码

    这篇文章主要介绍了Java查看本机端口是否被占用的主要原理,并结合具体实例给出了操作方法,需要的朋友可以参考下
    2017-09-09
  • SpringBoot配置MyBatis-Plus实现增删查改

    SpringBoot配置MyBatis-Plus实现增删查改

    本文主要介绍了SpringBoot配置MyBatis-Plus实现增删查改,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Java 通过mave命令下载jar包的示例代码

    Java 通过mave命令下载jar包的示例代码

    这篇文章主要介绍了Java 通过mave命令下载jar的示例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Spring Data Jpa 复合主键的实现

    Spring Data Jpa 复合主键的实现

    这篇文章主要介绍了Spring Data Jpa 复合主键的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • JDK8中的HashMap初始化和扩容机制详解

    JDK8中的HashMap初始化和扩容机制详解

    这篇文章主要介绍了JDK8中的HashMap初始化和扩容机制,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • java+jsp+struts2实现发送邮件功能

    java+jsp+struts2实现发送邮件功能

    这篇文章主要为大家详细介绍了java+jsp+struts2实现发送邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Spring boot测试找不到SpringRunner.class的问题

    Spring boot测试找不到SpringRunner.class的问题

    这篇文章主要介绍了Spring boot测试找不到SpringRunner.class的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01

最新评论