基于zipoutputStream的简单使用

 更新时间:2023年12月21日 10:29:42   作者:我自是年少韶华倾负  
这篇文章主要介绍了基于zipoutputStream的简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一 原因

 最近在改bug的时候遇到了一个与zipoutputStream相关的代码

虽然最终不是这处代码的问题,但是自己还是想总结一下zipoutputStream的使用

二 zipoutputStream 类图

三 zipoutputStream使用

zipoutputStream是fileOutputStream中的一种,它可以将内容直接写入到zip包中。

一般创建zipoutputStream通常是封装一个FileOutputStream,然后在每写入一个文件之前,需要先调用一次putNextEntry,然后使用write写入byte[]类型的数据,当写入完毕的时候使用colseEntry来结束这个文件的打包

其中

ZipEntry 表示压缩文件的条目 (就相当与java文件中的directory目录一样)

putNextEntry 开始编写新的ZIP文件条目并将流定位到条目数据的开头(换一个新的开始从头写).

如果仍然有效,则关闭当前的目录,如果没有为目录指定相关的压缩方法,则使用默认的压缩方法。

如果没有设置时间,则默认使用当前时间  (就是将条目放到zip包中)

代码说明:

import org.junit.Test;
 
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ziptest {
        @Test
        public void test() throws IOException {
            //File.separator代表了当前系统的文件分割符
            //linux使用/分割符会报错找不到文件,window系统下/和\都可以作为文件路径
            System.out.println("File.separator="+ File.separator);
 
            File file = new File("D:" + File.separator + "upgrade46.txt");
            File zipFile = new File("d:" + File.separator + "hello.zip");
            //读取相关的文件
            InputStream input = new FileInputStream(file);
            //设置输出流
            ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(
                    zipFile));
 
            zipOut.putNextEntry(new ZipEntry(file.getName()));
            // 设置注释
            zipOut.setComment("hello");
            int temp = 0;
            //读取相关的文件
            while((temp = input.read()) != -1){
                //写入输出流中
                zipOut.write(temp);
            }
            //关闭流
            input.close();
            zipOut.close();
        }
}

实现效果:

实现原理:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 简述Java中throw-throws异常抛出

    简述Java中throw-throws异常抛出

    任何Java代码都可以抛出异常,本文主要介绍了Java中throw-throws异常抛出,具有一定的参考价值,感兴趣的可以了解一下
    2021-08-08
  • Request对象如何获取请求头数据

    Request对象如何获取请求头数据

    这篇文章主要介绍了Request对象如何获取请求头数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • SpringBoot整合MyBatis和MyBatis-Plus请求后不打印sql日志的问题解决

    SpringBoot整合MyBatis和MyBatis-Plus请求后不打印sql日志的问题解决

    本文主要介绍了SpringBoot整合MyBatis和MyBatis-Plus请求后不打印sql日志的问题解决文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • MybatisPlus实现真正批量插入的详细步骤

    MybatisPlus实现真正批量插入的详细步骤

    在数据库操作中,批量插入是提升效率的重要手段,MyBatis-Plus提供了多种批量插入方法,但默认的saveBatch方法效率并不高,文章介绍了通过手动拼接SQL、使用IService接口以及自定义insertBatchSomeColumn方法进行优化,以实现更高效的批量插入,并给出了性能优化建议
    2024-10-10
  • java实现文本框和文本区的输入输出

    java实现文本框和文本区的输入输出

    这篇文章主要介绍了java实现文本框和文本区的输入输出的方法和具体示例,有需要的小伙伴可以参考下。
    2015-06-06
  • Java中instanceof 关键字的使用

    Java中instanceof 关键字的使用

    instanceof通过返回一个布尔值来指出,某个对象是否是某个特定类或者是该特定类的子类的一个实例,本文就来详细的介绍一下instanceof 关键字的使用,感兴趣的可以了解一下
    2023-10-10
  • 简单介绍java中equals以及==的用法

    简单介绍java中equals以及==的用法

    这篇文章主要介绍了简单介绍java中equals以及==的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Java C++分别实现滑动窗口的最大值

    Java C++分别实现滑动窗口的最大值

    这篇文章主要介绍了分别通过Java和C++实现滑动窗口最大值,即给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。感兴趣的可以了解一下
    2021-12-12
  • 关于maven打包出错的解决方案

    关于maven打包出错的解决方案

    这篇文章主要介绍了关于maven打包出错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • java面向对象:API(接口)与集合(ArrayList)

    java面向对象:API(接口)与集合(ArrayList)

    这篇文章主要介绍了Java语言面向对象的API与集合,还是十分不错的,这里给大家分享下,需要的朋友可以参考,希望能够给你带来帮助
    2021-08-08

最新评论