Java压缩文件夹最实用简单的方法

下面我将为您讲解Java压缩文件夹最实用简单的方法的完整攻略。

什么是Java压缩文件夹?

Java中的压缩文件夹指的是将多个文件和文件夹压缩成一个文件,以减小文件的大小,并且方便传输和存储。Java中提供了许多压缩文件夹的处理工具类,其中最常用的是java.util.zip.ZipOutputStream类和java.util.zip.ZipInputStream类。

压缩文件夹

下面我们来介绍Java中压缩文件夹的实现方法。假如我们要压缩一个名为folder的文件夹,可以通过下面的代码来实现:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipUtil {

    public static void main(String[] args) {
        String folderPath = "/path/to/folder";
        String zipPath = "/path/to/compressed/folder.zip";
        File folder = new File(folderPath);
        File zipFile = new File(zipPath);
        compressFolder(folder, zipFile);
    }

    private static void compressFolder(File folder, File zipFile) {
        try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
            compress(folder, zos, "");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void compress(File source, ZipOutputStream zos, String baseDir) throws IOException {
        if (source.isDirectory()) {
            File[] files = source.listFiles();
            if (files.length == 0) {
                ZipEntry entry = new ZipEntry(baseDir + source.getName() + "/");
                zos.putNextEntry(entry);
                zos.closeEntry();
            } else {
                for (File file : files) {
                    compress(file, zos, baseDir + source.getName() + "/");
                }
            }
        } else {
            ZipEntry entry = new ZipEntry(baseDir + source.getName());
            zos.putNextEntry(entry);
            try (FileInputStream fis = new FileInputStream(source)) {
                byte[] buffer = new byte[1024];
                int len;
                while ((len = fis.read(buffer)) > 0) {
                    zos.write(buffer, 0, len);
                }
            } finally {
                zos.closeEntry();
            }
        }
    }
}

上面的代码中,我们首先指定要压缩的文件夹路径和压缩后的zip文件路径,然后通过File对象创建对应的文件和文件夹对象。接着通过ZipOutputStream和FileOutputStream实例化一个输出流对象,并调用compressFolder方法进行文件夹压缩。

compressFolder方法调用了compress方法来进行递归压缩。在compress方法中,我们首先判断source是否是文件夹,如果是文件夹则获取该文件夹中所有的文件和文件夹,并递归调用compress方法进行压缩。如果是文件,则创建ZipEntry对象并写入压缩流中。

解压缩文件夹

下面我们来介绍Java中解压缩文件夹的实现方法。假如我们要解压缩一个名为folder.zip的zip文件,可以通过下面的代码来实现:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class UnzipUtil {

    public static void main(String[] args) {
        String zipPath = "/path/to/folder.zip";
        String folderPath = "/path/to/uncompressed/folder";
        File zipFile = new File(zipPath);
        File folder = new File(folderPath);
        unzip(zipFile, folder);
    }

    private static void unzip(File zipFile, File folder) {
        try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) {
            ZipEntry entry;
            byte[] buffer = new byte[1024];
            while ((entry = zis.getNextEntry()) != null) {
                File file = new File(folder, entry.getName());
                if (entry.isDirectory()) {
                    if (!file.exists()) {
                        file.mkdirs();
                    }
                } else {
                    File parent = file.getParentFile();
                    if (!parent.exists()) {
                        parent.mkdirs();
                    }
                    try (FileOutputStream fos = new FileOutputStream(file)) {
                        int len;
                        while ((len = zis.read(buffer)) > 0) {
                            fos.write(buffer, 0, len);
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上面的代码中,我们首先指定要解压缩的zip文件路径和解压缩后的文件夹路径,然后通过File对象创建对应的文件和文件夹对象。接着通过ZipInputStream和FileInputStream实例化一个输入流对象,并调用unzip方法进行解压缩。

在unzip方法中,我们首先通过ZipInputStream读取zip文件中的Entry,判断是否是文件夹,如果是则创建一个对应的文件夹,如果是文件则进行输出。同时也需要注意,如果上级目录不存在,我们需要先创建上级目录。

示例

压缩文件夹

下面是一个将/Users/username/test文件夹压缩成/Users/username/test.zip文件的代码示例:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipUtil {

    public static void main(String[] args) {
        String folderPath = "/Users/username/test";
        String zipPath = "/Users/username/test.zip";
        File folder = new File(folderPath);
        File zipFile = new File(zipPath);
        compressFolder(folder, zipFile);
    }

    private static void compressFolder(File folder, File zipFile) {
        try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
            compress(folder, zos, "");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void compress(File source, ZipOutputStream zos, String baseDir) throws IOException {
        if (source.isDirectory()) {
            File[] files = source.listFiles();
            if (files.length == 0) {
                ZipEntry entry = new ZipEntry(baseDir + source.getName() + "/");
                zos.putNextEntry(entry);
                zos.closeEntry();
            } else {
                for (File file : files) {
                    compress(file, zos, baseDir + source.getName() + "/");
                }
            }
        } else {
            ZipEntry entry = new ZipEntry(baseDir + source.getName());
            zos.putNextEntry(entry);
            try (FileInputStream fis = new FileInputStream(source)) {
                byte[] buffer = new byte[1024];
                int len;
                while ((len = fis.read(buffer)) > 0) {
                    zos.write(buffer, 0, len);
                }
            } finally {
                zos.closeEntry();
            }
        }
    }
}

解压缩文件夹

下面是一个将/Users/username/test.zip文件解压缩到/Users/username/unzip_test文件夹的代码示例:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class UnzipUtil {

    public static void main(String[] args) {
        String zipPath = "/Users/username/test.zip";
        String folderPath = "/Users/username/unzip_test";
        File zipFile = new File(zipPath);
        File folder = new File(folderPath);
        unzip(zipFile, folder);
    }

    private static void unzip(File zipFile, File folder) {
        try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) {
            ZipEntry entry;
            byte[] buffer = new byte[1024];
            while ((entry = zis.getNextEntry()) != null) {
                File file = new File(folder, entry.getName());
                if (entry.isDirectory()) {
                    if (!file.exists()) {
                        file.mkdirs();
                    }
                } else {
                    File parent = file.getParentFile();
                    if (!parent.exists()) {
                        parent.mkdirs();
                    }
                    try (FileOutputStream fos = new FileOutputStream(file)) {
                        int len;
                        while ((len = zis.read(buffer)) > 0) {
                            fos.write(buffer, 0, len);
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

希望我的回答能够帮助到您。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java压缩文件夹最实用简单的方法 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • CentOS7和8中安装Maven3.8.4的简单步骤

    下面我为你详细讲解 “CentOS7和8中安装Maven3.8.4的简单步骤”的完整攻略。 安装Java环境 在安装Maven之前,需要先在服务器上安装Java环境,否则Maven将无法正常使用。 # 在终端输入以下命令进行Java环境的安装 yum install java-1.8.0-openjdk-devel -y 安装完成后,检查Java环境是否正常…

    Java 2023年5月19日
    00
  • maven环境变量配置讲解

    下面是详细的”Maven环境变量配置讲解”攻略,包含了配置过程、示例和注意事项。 配置Maven环境变量 在配置Maven环境变量之前,需要先下载和安装Maven。 1. 配置MAVEN_HOME环境变量 第一步是配置MAVEN_HOME环境变量。MAVEN_HOME是指Maven的安装目录,以下是配置MAVEN_HOME环境变量的步骤: 打开计算机的文件资…

    Java 2023年5月20日
    00
  • MyBatis中传入参数parameterType类型详解

    MyBatis中传入参数parameterType类型详解 在使用MyBatis进行数据查询时,我们需要在SQL语句中传入参数,而MyBatis中的参数类型有多种不同的选择,本文将详细介绍MyBatis中参数类型的使用方法。 传入Java基本数据类型 在MyBatis中,可以直接传入Java中的基本数据类型,例如Java中的String类型、int类型、fl…

    Java 2023年5月19日
    00
  • 使用 Sa-Token 完成踢人下线功能

    一、需求 在企业级项目中,踢人下线是一个很常见的需求,如果要设计比较完善的话,至少需要以下功能点: 可以根据用户 userId 踢出指定会话,对方再次访问系统会被提示:您已被踢下线,请重新登录。 可以查询出一个账号共在几个设备端登录,并返回其对应的 Token 凭证,以便后续操作。 可以只踢出一个账号某一个端的会话,其他端不受影响。例如在某电商APP上可以看…

    Java 2023年5月9日
    00
  • java 异常详解及应用实例

    Java 异常详解及应用实例 Java 是一种强类型语言,它强制要求程序员在开发过程中必须处理所有可能发生的异常。Java 提供了异常机制来处理错误并正确退出程序。在该文中,我们将详细介绍 Java 异常的使用和应用实例。 异常的概念和机制 Java 中的异常指程序在执行过程中出现的不正常情况或错误,如数组越界、除数为零等情况。当程序执行发生异常时,JVM …

    Java 2023年5月27日
    00
  • 10中java常见字符串操作实例

    以下是“10种Java常见字符串操作实例”的完整攻略: 简介 字符串是Java中最常用的数据类型之一,几乎所有的Java程序都会涉及字符串的处理。本文主要介绍Java中常见的字符串操作方法。 10种Java常见字符串操作实例 1. 字符串的比较 比较两个字符串是否相等,可以使用equals()方法。 示例1: String str1 = "Hell…

    Java 2023年5月26日
    00
  • Java CompletableFuture 异步超时实现深入研究

    《Java CompletableFuture 异步超时实现深入研究》介绍了如何通过 CompletableFuture 类实现异步操作的超时控制,通过本文可以深入了解 CompletableFuture 的超时机制,并实现项目开发中常用的异步超时场景。 本文包含以下内容: 1. CompletableFuture 简介 在Java 8中,引入了 Compl…

    Java 2023年5月27日
    00
  • SpringMVC拦截器快速掌握上篇

    下面是关于“SpringMVC拦截器快速掌握上篇”的完整攻略,希望能够对您有所帮助。 什么是SpringMVC拦截器 在SpringMVC框架中,拦截器是一个非常重要的组件,它可以让我们在请求到达Controller之前或者返回结果给客户端之前进行一些统一处理,比如日志记录、权限校验等。 SpringMVC拦截器的配置 配置SpringMVC拦截器很简单,只…

    Java 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部