Java中通过ZipOutputStream类如何将多个文件打成zip

 更新时间:2023年09月12日 16:11:51   作者:是Smoky呢  
ZipOutputStream 是Java中用于创建ZIP文件的类,它是 java.util.zip 包中的一部分,通过使用 ZipOutputStream ,可以将多个文件压缩到一个ZIP文件中,这篇文章主要介绍了Java中(ZipOutputStream)如何将多个文件打成zip,需要的朋友可以参考下

当想要将两个文件打包成ZIP文件时,可以使用Java的ZipOutputStream类。

ZipOutputStream 是Java中用于创建ZIP文件的类,它是 java.util.zip 包中的一部分。通过使用 ZipOutputStream ,可以将多个文件压缩到一个ZIP文件中。

以下是 ZipOutputStream 的一些主要特性和方法:

  • 创建ZIP文件ZipOutputStream 允许创建一个新的ZIP文件,也可以将数据添加到现有的ZIP文件中。
  • 添加ZIP条目:使用 putNextEntry(ZipEntry entry) 方法,可以将文件或目录添加为ZIP文件中的一个条目。 ZipEntry 对象代表一个ZIP条目,可以是文件或目录。
  • 写入数据:一旦添加了ZIP条目,可以使用 write(byte[] b, int off, int len) 方法将数据写入ZIP文件。这样,可以从原始文件中读取数据并将其写入到ZIP文件中。
  • 关闭条目:在写入完ZIP条目的数据后,使用 closeEntry() 方法来关闭当前的ZIP条目,以便可以添加下一个条目。
  • 关闭流:在完成ZIP文件的创建后,记得使用 close() 方法关闭 ZipOutputStream ,以确保所有的数据都被正确写入ZIP文件。

以下是一个简单的示例代码,演示如何使用 ZipOutputStream 创建一个ZIP文件并添加两个文件到其中:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipOutputStreamExample {
    public static void main(String[] args) {
        String file1Path = "/path/to/file1.txt";
        String file2Path = "/path/to/file2.txt";
        String zipOutputPath = "/path/to/output.zip";
        try (FileOutputStream fos = new FileOutputStream(zipOutputPath);
             ZipOutputStream zipOut = new ZipOutputStream(fos);
             FileInputStream fis1 = new FileInputStream(file1Path);
             FileInputStream fis2 = new FileInputStream(file2Path)) {
            addToZipFile(file1Path, fis1, zipOut);
            addToZipFile(file2Path, fis2, zipOut);
            System.out.println("文件成功添加到ZIP文件!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private static void addToZipFile(String filePath, FileInputStream fis, ZipOutputStream zipOut)
            throws IOException {
        ZipEntry zipEntry = new ZipEntry(filePath);
        zipOut.putNextEntry(zipEntry);
        byte[] bytes = new byte[1024];
        int length;
        while ((length = fis.read(bytes)) >= 0) {
            zipOut.write(bytes, 0, length);
        }
        zipOut.closeEntry();
        fis.close();
    }
}

下面是一个如何将两个文件打包成一个ZIP文件的示例代码: 

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipFilesExample {
    public static void main(String[] args) {
        // 两个文件的路径
        String file1Path = "/path/to/file1.txt";
        String file2Path = "/path/to/file2.txt";
        // ZIP文件的输出路径
        String zipOutputPath = "/path/to/output.zip";
        try (FileOutputStream fos = new FileOutputStream(zipOutputPath);
             ZipOutputStream zipOut = new ZipOutputStream(fos);
             FileInputStream fis1 = new FileInputStream(file1Path);
             FileInputStream fis2 = new FileInputStream(file2Path)) {
            // 添加第一个文件到ZIP文件
            addToZipFile(file1Path, fis1, zipOut);
            // 添加第二个文件到ZIP文件
            addToZipFile(file2Path, fis2, zipOut);
            System.out.println("文件成功打包成ZIP文件!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private static void addToZipFile(String filePath, FileInputStream fis, ZipOutputStream zipOut)
            throws IOException {
        // 创建ZIP条目
        ZipEntry zipEntry = new ZipEntry(new File(filePath).getName());
        // 将ZIP条目添加到ZIP文件
        zipOut.putNextEntry(zipEntry);
        // 从输入流读取数据并写入ZIP文件
        byte[] bytes = new byte[1024];
        int length;
        while ((length = fis.read(bytes)) >= 0) {
            zipOut.write(bytes, 0, length);
        }
        // 关闭当前ZIP条目
        zipOut.closeEntry();
        // 关闭输入流
        fis.close();
    }
}

在上面的代码中,需要将 /path/to/file1.txt /path/to/file2.txt 替换为实际的文件路径,并将 /path/to/output.zip 替换为您希望生成的ZIP文件的路径。

运行此Java程序后,它将读取这两个文件并将它们打包成名为 output.zip 的ZIP文件,其中包含这两个文件。请确保路径和文件名正确,并且具有写入ZIP文件的权限。

到此这篇关于Java中(ZipOutputStream)如何将多个文件打成zip的文章就介绍到这了,更多相关java多个文件打zip内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java AOP面向切面编程的概念和实现方式

    Java AOP面向切面编程的概念和实现方式

    AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍Java AOP面向切面编程的概念和实现方式,感兴趣的朋友一起看看吧
    2025-09-09
  • 一篇文章带你入门Java之编程规范

    一篇文章带你入门Java之编程规范

    这篇文章主要介绍了如何养成良好java代码编码规范,规范需要平时编码过程中注意,是一个慢慢养成的好习惯,下面小编就带大家来一起详细了解一下吧
    2021-08-08
  • Spring AMQP 详细介绍(最新推荐)

    Spring AMQP 详细介绍(最新推荐)

    SpringAMQP是Spring框架的高级消息队列集成模块,提供了与RabbitMQ等消息中间件的交互,支持声明式编程、事务集成和可靠性机制,本文介绍Spring AMQP 详细知识,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • SPRINGMVC 406问题解决方案

    SPRINGMVC 406问题解决方案

    这篇文章主要介绍了SPRINGMVC 406问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java上传文件到服务器端的方法

    Java上传文件到服务器端的方法

    这篇文章主要为大家详细介绍了Java上传文件到服务器端的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 使用MockMvc进行controller层单元测试 事务自动回滚的完整案例

    使用MockMvc进行controller层单元测试 事务自动回滚的完整案例

    这篇文章主要介绍了使用MockMvc进行controller层单元测试 事务自动回滚的完整案例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 使用Java8进行分组(多个字段的组合分组)

    使用Java8进行分组(多个字段的组合分组)

    本文主要介绍了使用Java8进行分组(多个字段的组合分组),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • docusaurus如何添加一个搜索功能

    docusaurus如何添加一个搜索功能

    这篇文章主要介绍了docusaurus如何添加一个搜索功能,本文通过实例图文相结合给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • 在SpringBoot中配置和使用多个数据源方式

    在SpringBoot中配置和使用多个数据源方式

    本文介绍如何在Spring Boot中配置多数据源,需通过配置类声明不同数据源bean,使用@ConfigurationProperties映射属性,并针对SpringDataJDBC和JPA分别配置JdbcTemplate与EntityManagerFactory,注意拆分包及@Primary注解的使用,同时可配置Hikari连接池
    2025-08-08
  • Java fastdfs客户端实现上传下载文件

    Java fastdfs客户端实现上传下载文件

    这篇文章主要介绍了Java fastdfs客户端实现上传下载文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10

最新评论