JAVA开发 选择指定的文件生成ZIP压缩包

1、ZipOutputStream

ZipOutputStream 是 Java 中的一个类,它属于 java.util.zip 包,用于将多个文件或数据流写入到一个 ZIP 输出流中,从而创建 ZIP 文件。ZIP 文件是一种常用的压缩文件格式,可以包含多个文件和目录,并且这些文件和目录在 ZIP 文件中被压缩以节省存储空间。

1.1 主要方法

项目Value
putNextEntry(ZipEntry e)此方法用于开始写入新的 ZIP 文件条目,并将流定位到条目数据的开始位置。ZipEntry 对象表示 ZIP 文件中的一个条目,可以包含条目的名字、大小、时间戳等信息。
write(byte[] b, int off, int len)此方法从字节数组 b 中的 off 位置开始,将 len 长度的字节写入当前 ZIP 条目。
closeEntry()此方法用于关闭当前 ZIP 条目,并将流定位到下一个条目的开始位置。在写入完一个条目的数据后,应调用此方法以表示该条目已完成。
finish()完成 ZIP 输出流的写入,但不关闭底层的 OutputStream。在调用 finish() 之后,可以继续向底层的 OutputStream 写入数据,但不能再向 ZipOutputStream 写入新的条目。
close()关闭 ZIP 输出流,并释放与之相关联的资源。在调用 close() 之后,不能再向流中写入数据。通常,在 close() 被调用时,会自动调用 finish()。

1.2 使用步骤

要使用 ZipOutputStream 类来创建 ZIP 文件并添加条目(文件或数据),你需要遵循以下步骤:

  1. 创建一个 FileOutputStream 对象:这个对象将用于将 ZIP 数据写入到文件中。
  2. 使用 FileOutputStream 创建一个 ZipOutputStream 对象:ZipOutputStream 封装了 FileOutputStream,并提供了写入 ZIP 格式数据的方法。
  3. 为 ZIP 文件中的每个条目创建 ZipEntry 对象:每个 ZipEntry 对象代表 ZIP 文件中的一个文件或目录。
  4. 调用 putNextEntry(ZipEntry e) 方法:在写入文件内容之前,调用此方法以告诉 ZipOutputStream 你将要写入一个新的条目。
  5. 写入文件内容:使用 ZipOutputStream 的 write() 方法将文件内容写入 ZIP 文件中。
  6. 调用 closeEntry() 方法:在完成一个条目的内容写入后,调用此方法以关闭当前条目。
  7. 关闭 ZipOutputStream 和 FileOutputStream:完成所有条目的写入后,关闭这两个流以释放资源。

2、案例实现

案例简述:通过启动java代码来打开文件选择器对话框,用户选择确认需要进行压缩的文件,选择完毕后点击按钮确认,指定位置自动生成包含该文件的压缩包。

2.1 代码块

import javax.imageio.stream.FileImageInputStream;
import javax.swing.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.zip.ZipOutputStream;
import java.util.zip.ZipEntry;

public class FileZipper {

    private static final String FILEPATH  = "D:\\OA_Temp\\attachments\\rar_attachs\\";

	//生成文件名
    public static String CreateFileName(String suffix){
        String fileName;
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
        fileName = FILEPATH + sdf.format(date) +" temp."  + suffix;
        return fileName;
    }

	//压缩单文件
    public static void FileZipperByAFile(){
        String filename = GenerateCompress.GenerateFileName("","");
        JFileChooser fileChooser = new JFileChooser("D:\\OA_Temp\\attachments\\");  //设置文件选择器对话框默认的路径
        fileChooser.setMultiSelectionEnabled(false);
        int value = fileChooser.showOpenDialog(null);
        if(value != JFileChooser.APPROVE_OPTION){
            return ;
        }

        File outputZip = new File(CreateFileName("zip")); // 指定输出的ZIP文件
        File file = fileChooser.getSelectedFile();

        try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(outputZip))) {
            // 创建一个ZipEntry,设置压缩后文件的名称
            ZipEntry zipEntry = new ZipEntry(file.getName());
            zos.putNextEntry(zipEntry);

            // 使用FileInputStream读取源文件
            try (FileInputStream fis = new FileInputStream(file)) {
                byte[] bytes = new byte[1024];
                int length;
                // 读取源文件内容并写入到ZipOutputStream
                while ((length = fis.read(bytes)) >= 0) {
                    zos.write(bytes, 0, length);
                }
            }

            // 关闭ZipEntry
            zos.closeEntry();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("File compressed successfully!");
    }
    
    public static void main(String[] args) {
        FileZipperByAFile();
    }
}

2.2 运行界面

  1. 文件选择器对话框打开默认路径:
    在这里插入图片描述
  2. 执行结果
    在这里插入图片描述
  3. 生成压缩包
    在这里插入图片描述
  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值