Java的文件压缩-Zip格式

红烧土豆泥 等级 383 0 0
/**
  * 文件压缩
  */
public class ZipFile_Compress {
    public static void main(String[] args) throws IOException {
        File file = new File("E:\\aaa\\web01");

        String savePath = "E:\\aaa" + File.separator + file.getName() + ".zip";
        File saveFile = new File(savePath);
        if (!saveFile.getParentFile().exists()) {
            saveFile.getParentFile().mkdirs();
        }

        ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(savePath, true));

        toMakeZipFilePre(file, saveFile.getParentFile().getPath(), outputStream);

        outputStream.close();
    }

    /**
     * 文件压缩前的准备处理
     * @param file
     * @param savePath
     * @param outputStream
     * @throws IOException
     */
    public static void toMakeZipFilePre(File file, String savePath, ZipOutputStream outputStream) throws IOException {
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            if (files != null) {
                for (File f : files) {
                    toMakeZipFilePre(f, savePath, outputStream);
                }
            }
        } else {
            /**
             * 截取后面要用的文件条目
             */
            String realSavePath = file.getAbsolutePath().substring(savePath.length() + 1).replaceAll("\\\\", "/");
            toMakeZipFile(file, realSavePath, outputStream);
            System.out.println(realSavePath);
        }
    }

    public static void toMakeZipFile(File file, String savePath, ZipOutputStream outputStream) throws IOException {
        /**
         * 将相对路径封装成条目
         */
        ZipEntry zipEntry = new ZipEntry(savePath);
        /**
         * 在输出流中编写一条新的条目
         */
        outputStream.putNextEntry(zipEntry);

        InputStream inputStream = new BufferedInputStream(new FileInputStream(file));

        int len = 0;
        byte[] bytes = new byte[1024];
        while ((len = inputStream.read(bytes)) != -1) {
            outputStream.write(bytes, 0, len);
        }
        outputStream.flush();
        inputStream.close();
    }

}
收藏
评论区

相关推荐

Java的其他Map
一、LinkedHashMap 1.1 应用场景 HashMap是无序的,当我们希望有顺序地去存储keyvalue时,就需要使用LinkedHashMap了。 1.2 插入顺序和访问顺序 LinkedHashMap默认的构造参数是默认  插入顺序的,就是说你插入的是什么顺序,读出来的就是什么顺序,但是也有访问顺序,就是说你访问了一个key,这个
Zip和7-zip谁更强,如何选择?
Zip和7zip谁更强,如何选择? 一. 7z rar zip之间的区别 mysql 7z一般对应的软件是7zip zip对应的是winzip rar对应的 winrar 只不过现在这几个软件基本互相支持。 7z压缩比率大些。zip次之,压缩比率越大,压缩的越小哦 zip格式比较常见,支持泛围广。windows操作系统不装任选第三方软件也
Groovy初探
开始之前 了解本教程的主要内容,以及如何从中获得最大收获。 关于本教程 如果现在有人要开始完全重写 Java,那么 Groovy 就像是 Java 2.0。Groovy 并没有取代 Java,而是作为 Java 的补充,它提供了更简单、更灵活的语法,可以在运行时动态地进行类型检查。您可以使用 Groovy 随意编写 Java 应用程序,连接 Java
Ubuntu 20.04 常见文件解压 (实用)
第一类 处理 .zip或 .rar 时,需要先下载相对应的unzip和unrar,可在终端,执行 sudo aptget install unzip sudo aptget install unrar .zip unzip .zip .rar unrar x .rar 第二类 .tar
Java的JDK配置
一、JDK的环境配置 1、在jdk官网下载(https://www.oracle.com/java/technologies/javasejdk14downloads.html)所想要的jdk版本,选择路径安装.(我这边选择的是windowsx64\_bin.exe) 安装好之后,打开电脑控制面板主页,点击选择高级系统设置
Java的文件压缩-Zip格式
language/ 文件压缩 /public class ZipFileCompress public static void main(String[] args) throws IOException File file new File("E:\\aaa\\web01"); String savePath
mysql基础入门_thankszmy的博客
一、MYSQL 安装下载完后,我们将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 C:\\web\\mysql8.0.15winx64 下。打开刚刚解压的文件夹 C:\\web\\mysql8.0.15winx64,在该文件夹下创建 my.ini 配置文件,编辑 my.ini 配置以下基本信息: [mysql] 设置mysql客户端默认字符集
zip压缩包——加密破解篇
写在前面 前几天在某个 CTF 的交流群想看看大佬们都在聊什么,偶然间看到有人发了一个 pdf (就是这篇文章),一开始顺手点下载下来没怎么看,过几天打开看了一下发现写得挺好的,这篇文章应该是一个大佬的博客里的文章,但是尝试去找到大佬的博客地址却一直没有找到,很遗憾 QAQ 伪加密、爆破、明文攻击和CRC32碰撞+ zip 文件格式: zip 文件由三部分
程序员怎样写出搞垮公司的代码?
1、乱写注释 注释就像内裤,外面看不见,但是很重要。 注释要严谨,不能有明显的漏洞。如果你的内裤有漏洞,你不尴尬吗?当然了,如果你实力够强大,别人会尴尬。 2、代码和显示不一致 界面上是Post code,代码里是Zip code。看代码看到怀疑人生! 所以说年轻人,你只看到了第二层,你以为我在第一层,实际上我在第五层,你明白我在讲什么吗?
MongoDB的安装与基本操作
最近刚好在学习爬虫,了解到MongoDB 非常适合 JSON 数据存储,受到广大爬虫程序员的青睐,故学习之。 一、安装MongoDB官网:进入官网后选择你需要的版本,系统,已及你想要的安装包(可选msi或zip,这里我使用msi,双击安装,简单!)::: warning 在 MongoDB 2.2 版本后已经不再支持 Windows XP 系统。最新版本也
手把手教你用Python破解加密 zip 文件的密码
摄影:产品经理海鲜咖喱泡饭 之前在家里的老电脑中,发现一个加密zip压缩包,由于时隔太久忘记密码了,依稀记得密码是6位字母加数字,网上下载了很多破解密码的软件都没有效果,于是想到自己用Python写一个暴力破解密码的脚本。 Python有一个内置模块zipfile可以干这个事情,测试一波,一个测试文件,设置解压密码为123。import zipfile
2021年度最全面JVM虚拟机,类加载过程与类加载器
前言类装载器子系统是JVM中非常重要的部分,是学习JVM绕不开的一关。一般来说,Java 类的虚拟机使用 Java 方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。每个这样的实例用来表
2021年度最全面JVM虚拟机,类加载过程与类加载器
前言类装载器子系统是JVM中非常重要的部分,是学习JVM绕不开的一关。一般来说,Java 类的虚拟机使用 Java 方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。每个这样的实例用来表
JAVA回调机制(CallBack)之小红是怎样买到房子的??
JAVA回调机制CallBack 序言最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么问题。但是,对于初学的我来说,缺了一个循序渐进的过程。此处,将我对回调机制的个人理解,按
Java的文件解压-Zip格式
language / 作者认为解压缩最安全的方法 先创建所有的文件夹 之后创建再文件 <p 原因:未处理好当压缩文件夹下第一个是一个文件夹,考虑到存在有文件可以没有(.)等这些标识符,无法识别出是否是文件夹还是文件, 故根据zipEntry.getName后续返回值是否存在后续文件夹即(\\符号)判断是否其是文件夹,进而可以创建出压缩包下所有的