java使用ZipInputStream实现读取和写入zip文件

 更新时间:2023年11月06日 10:23:18   作者:bug生产者  
zip文档可以以压缩格式存储一个或多个文件,本文主要为大家详细介绍了java如何使用ZipInputStream读取Zip文档与写入,需要的小伙伴可以参考下

zip压缩

zip文档可以以压缩格式存储一个或多个文件,可以使用ZipInputStream读取Zip文档,使用ZipOutputStream来写入到Zip文件中

<!-- more -->

ZipInputStream读取

ZipInputStream zin = new ZipInputStream(in);
ZipEntry ze;
// getNextEntry返回描述这个项的ZipEntry的对象
while ((ze = zin.getNextEntry()) != null) {
    // getInputStream获取用于读取该项的输入流
        BufferedReader br = new BufferedReader(
                new InputStreamReader(zf.getInputStream(ze), charset));
  // 业务逻辑 todo
        br.close();
  // closeEntry关闭当前打开的项
    zin.closeEntry();
}
zin.close();

ZipOutputStream写入

ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));

File fileWillZip = new File(dir);

if (fileWillZip.exists()) {
    // 需要压缩的文件是文件夹。需要递归进行压缩
    if(fileWillZip.isDirectory()){
        compressZip(zipOut,fileWillZip,fileWillZip.getName());
    } else { // 是文件,直接压缩
        zip(zipOut,fileWillZip,dir);
    }
}
zipOut.closeEntry();
zipOut.close();



private void compressZip(ZipOutputStream zipOutput, File file, String suffixpath) {
        File[] listFiles = file.listFiles();// 列出所有的文件
        for(File fi : listFiles){
            if(fi.isDirectory()){ // 如果是文件夹,继续递归
                if(suffixpath.equals("")){
                    compressZip(zipOutput, fi, fi.getName());
                }else{
                    compressZip(zipOutput, fi, suffixpath + File.separator + fi.getName());
                }
            }else{
                zip(zipOutput, fi, suffixpath);
            }
        }
    }

    public void zip(ZipOutputStream zipOutput, File file, String suffixpath) {
        try {
          // 创建ZipEntry对象
            ZipEntry zEntry = null;
            if(suffixpath.equals("")){
                zEntry = new ZipEntry(file.getName());
            }else{
                zEntry = new ZipEntry(suffixpath + File.separator + file.getName());
            }
          // putNextEntry将给定的ZipEntry中的信息写出到输出流,并定位用于写出数据的流,然后这些数据可以通过write方法写出到这个输出流中
            zipOutput.putNextEntry(zEntry);
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
            byte[] buffer = new byte[1024];
            int read = 0;
            while((read = bis.read(buffer)) != -1){
                zipOutput.write(buffer, 0, read);
            }
            bis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

到此这篇关于java使用ZipInputStream实现读取和写入zip文件的文章就介绍到这了,更多相关java ZipInputStream内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现记事本功能

    Java实现记事本功能

    这篇文章主要为大家详细介绍了Java实现记事本功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • java中通过网卡名称获取IP地址

    java中通过网卡名称获取IP地址

    java中通过网卡名称获取IP地址,需要的朋友可以参考一下
    2013-04-04
  • Spring Security添加二次认证的项目实践

    Spring Security添加二次认证的项目实践

    在用户自动登录后,可以通过对密码进行二次校验进而确保用户的真实性,本文就来介绍一下Spring Security添加二次认证的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • JavaWeb实现邮件发送接收功能

    JavaWeb实现邮件发送接收功能

    这篇文章主要为大家详细介绍了JavaWeb邮件发送接收功能的实现,邮件发送和接收功能是非常常用的功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 使用SpringCache加Redis做缓存

    使用SpringCache加Redis做缓存

    这篇文章主要介绍了使用SpringCache加Redis做缓存方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring框架构造注入type属性实例详解

    Spring框架构造注入type属性实例详解

    这篇文章主要介绍了Spring框架构造注入type属性实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Springboot常用方法参数注解示例详解

    Springboot常用方法参数注解示例详解

    这篇文章主要介绍了Springboot常用方法参数注解及示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Java阻塞队列四组API介绍(小结)

    Java阻塞队列四组API介绍(小结)

    这篇文章主要介绍了Java阻塞队列四组API介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Java Spring详解如何配置数据源注解开发以及整合Junit

    Java Spring详解如何配置数据源注解开发以及整合Junit

    Spring 是目前主流的 Java Web 开发框架,是 Java 世界最为成功的框架。该框架是一个轻量级的开源框架,具有很高的凝聚力和吸引力,本篇文章带你了解如何配置数据源、注解开发以及整合Junit
    2021-10-10
  • Java中Lambda表达式并行与组合行为

    Java中Lambda表达式并行与组合行为

    这篇文章主要介绍了Java中Lambda表达式并行与组合行为,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02

最新评论