Java ZipOutputStream 的使用,实现压缩文件

Java 压缩文件主要通过 ZipOutputStream 实现,ZipOutputStream 有 5 个关键的方法:

  • putNextEntry() 向压缩包中添加子文件,并设置文件路径和名称(压缩包解压后得到的文件叫子文件),该方法接受一个 ZipEntry 对象,创建 ZipEntry 对象时传递路径名称,如果路径名称中存在 /,/ 前面表示文件夹,/ 后面表示文件名称,每次向压缩包中添加新的子文件都要调用一次 putNextEntry() 方法。
  • write() 当调用 putNextEntry() 方法之后,就需要通过 write() 方法写入子文件内容。
  • closeEntry() 每次写入子文件完毕后都需要调用 closeEntry() 方法,表示当前子文件写入已经完成。
  • finish() 刷新流对象。
  • close() 释放流对象。

简单压缩文件案例:

public static void main(String[] args) throws IOException {
  // 需要压缩的两个文件路径
  String filePath1 = "D:\\文件01.txt";
  String filePath2 = "D:\\文件02.txt";

  // 需要压缩文件的流对象
  FileInputStream fis1 = new FileInputStream(filePath1);
  FileInputStream fis2 = new FileInputStream(filePath2);

  // 定义压缩包输出流对象,文件以 .zip 结尾
  FileOutputStream outputStream = new FileOutputStream("D:\\文件.zip");

  // 定义压缩包对象
  ZipOutputStream zip = new ZipOutputStream(outputStream);

  // 设置第一个文件的名称
  zip.putNextEntry(new ZipEntry("压缩-文件01.txt"));
  // 往压缩包中写入第一个文件
  byte[] bytes = new byte[1024 * 1024];
  int length = 0;
  while ((length = fis1.read(bytes)) != -1) {
    zip.write(bytes, 0, length);
  }
  // 停止第一个文件的写入
  zip.closeEntry();

  // 设置第二个文件的名称
  zip.putNextEntry(new ZipEntry("压缩-文件02.txt"));
  // 往压缩包中写入第二个文件
  while ((length = fis2.read(bytes)) != -1) {
    zip.write(bytes, 0, length);
  }
  // 停止第二个文件的写入
  zip.closeEntry();

  // 结束压缩
  zip.finish();

  // 释放资源
  outputStream.close();
  zip.close();
  fis2.close();
  fis1.close();
}

效果如下:
Java ZipOutputStream 的使用,实现压缩文件_第1张图片

提示:如果需要将文件上传到文件服务器,那么可能需要将输出流 OutputStream 转成输入流 InputStream,可以通过 ByteArrayOutputStream 和 ByteArrayInputStream 来实现:

// 创建输出流对象
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// 通过输出流生成输入流
ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());

你可能感兴趣的:(Java,java)