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中@DateTimeFormat @JsonFormat失效原因及测试填坑

    Java中@DateTimeFormat @JsonFormat失效原因及测试填坑

    本文主要介绍了Java中@DateTimeFormat @JsonFormat失效原因及测试填坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 详述IntelliJ IDEA插件的安装及使用方法(图解)

    详述IntelliJ IDEA插件的安装及使用方法(图解)

    本篇文章主要介绍了详述 IntelliJ IDEA 插件的安装及使用方法(图解),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • org.apache.ibatis.annotations不存在的问题

    org.apache.ibatis.annotations不存在的问题

    这篇文章主要介绍了org.apache.ibatis.annotations不存在的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • java中实现汉字按照拼音排序(示例代码)

    java中实现汉字按照拼音排序(示例代码)

    这篇文章主要是对java中将汉字按照拼音排序的实现代码进行了详细的分析介绍。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • java中DecimalFormat四舍五入用法详解

    java中DecimalFormat四舍五入用法详解

    这篇文章主要为大家详细介绍了java中DecimalFormat四舍五入的用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • SpringBoot拦截器使用精讲

    SpringBoot拦截器使用精讲

    拦截器可以根据 URL 对请求进行拦截,主要应用于登陆校验、权限验证、乱码解决、性能监控和异常处理等功能上。SpringBoot同样提供了拦截器功能。 本文将为大家详细介绍一下
    2021-12-12
  • 快速了解Java中ThreadLocal类

    快速了解Java中ThreadLocal类

    这篇文章主要介绍了快速了解Java中ThreadLocal类,介绍了ThreadLocal 是什么,ThreadLocal的作用,ThreadLocal 原理等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • SpringMVC核心技术

    SpringMVC核心技术

    这篇文章主要介绍了SpringMVC入门实例,在springmvc入门教程里算是比较不错的,结构也比较完整,需要的朋友可以参考。希望可以帮助到你
    2021-07-07
  • JavaWeb实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)

    JavaWeb实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)

    最近做了企业项目,其中有这样的需求要求同一帐号同一时间只能一个地点登陆类似QQ登录的功能。下面小编通过本文给大家分享实现思路,感兴趣的朋友参考下吧
    2016-11-11
  • Java的项目构建工具Maven的配置和使用教程

    Java的项目构建工具Maven的配置和使用教程

    Maven是Java世界中的项目管理和构建自动化工具,基于POM项目对象模型的思想,下面我们就具体来看一下具体的Java的项目构建工具Maven的配置和使用教程:
    2016-05-05

最新评论