JAVA开发 选择指定的文件生成ZIP压缩包
- 1、ZipOutputStream
- 1.1 主要方法
- 1.2 使用步骤
- 2、案例实现
- 2.1 代码块
- 2.2 运行界面
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 文件并添加条目(文件或数据),你需要遵循以下步骤:
- 创建一个 FileOutputStream 对象:这个对象将用于将 ZIP 数据写入到文件中。
- 使用 FileOutputStream 创建一个 ZipOutputStream 对象:ZipOutputStream 封装了 FileOutputStream,并提供了写入 ZIP 格式数据的方法。
- 为 ZIP 文件中的每个条目创建 ZipEntry 对象:每个 ZipEntry 对象代表 ZIP 文件中的一个文件或目录。
- 调用 putNextEntry(ZipEntry e) 方法:在写入文件内容之前,调用此方法以告诉 ZipOutputStream 你将要写入一个新的条目。
- 写入文件内容:使用 ZipOutputStream 的 write() 方法将文件内容写入 ZIP 文件中。
- 调用 closeEntry() 方法:在完成一个条目的内容写入后,调用此方法以关闭当前条目。
- 关闭 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;// 读取源文件内容并写入到ZipOutputStreamwhile ((length = fis.read(bytes)) >= 0) {zos.write(bytes, 0, length);}}// 关闭ZipEntryzos.closeEntry();} catch (IOException e) {e.printStackTrace();}System.out.println("File compressed successfully!");}public static void main(String[] args) {FileZipperByAFile();}
}
2.2 运行界面
- 文件选择器对话框打开默认路径:
- 执行结果
- 生成压缩包