前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Java进行文件压缩和解压缩

如何使用Java进行文件压缩和解压缩

作者头像
用户1289394
发布2023-12-15 12:56:40
1530
发布2023-12-15 12:56:40
举报
文章被收录于专栏:Java学习网Java学习网

Java是一种跨平台的编程语言,可以用于许多应用程序的开发,在进行文件处理时也有多种方法可以用来实现。其中包括文件压缩和解压缩,这在许多场合下都是非常有用的。

文件压缩是指将一个大文件或目录压缩为单个压缩文件。这样的好处是占用更少的磁盘空间,并且使文件传输变得更加方便。Java中提供了ZipOutputStream和GZIPOutputStream类来完成文件压缩的任务。

ZipOutputStream类可以用于创建ZIP格式的压缩文件。下面是一段Java代码,演示如何使用ZipOutputStream类来创建一个名为“compressed.zip”压缩文件,并向其中添加两个文件:

代码语言:javascript
复制
import java.io.*;
import java.util.zip.*;

public class ZipExample {

  public static void main(String[] args) {
    byte[] buffer = new byte[1024];

    try {
      FileOutputStream fos = new FileOutputStream("compressed.zip");
      ZipOutputStream zos = new ZipOutputStream(fos);

      String file1 = "file1.txt";
      String file2 = "file2.txt";

      String[] files = {file1, file2};

      for (int i=0; i<files.length; i++) {
        FileInputStream fis = new FileInputStream(files[i]);
        zos.putNextEntry(new ZipEntry(files[i]));

        int length;
        while ((length = fis.read(buffer)) > 0) {
          zos.write(buffer, 0, length);
        }

        zos.closeEntry();
        fis.close();
      }

      zos.close();

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

上述代码中,我们首先定义一个名为“compressed.zip”的输出文件流,并使用ZipOutputStream创建一个相应的输出流。接着,我们将需要压缩的两个文件存储到一维数组变量files中,每次循环对其中一个文件进行处理,在ZipOutputStream建立的压缩文件compressed.zip中添加这个文件,并关闭压缩项。最后,我们关闭整个压缩过程。

GZIPOutputStream类可以用于创建GZIP格式的压缩文件。下面是一段Java代码,展示如何使用GZIPOutputStream类来创建一个名为“compressed.gz”压缩文件:

代码语言:javascript
复制
import java.io.*;
import java.util.zip.*;

public class GZIPExample {

  public static void main(String[] args) {
    byte[] buffer = new byte[1024];

    try {
      FileInputStream fis = new FileInputStream("input.txt");
      FileOutputStream fos = new FileOutputStream("compressed.gz");
      GZIPOutputStream gzipOS = new GZIPOutputStream(fos);

      int length;
      while ((length = fis.read(buffer)) > 0) {
        gzipOS.write(buffer, 0, length);
      }

      fis.close();
      gzipOS.finish();
      gzipOS.close();

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

上述代码中,我们首先定义一个名为“input.txt”的输入文件流,并定义一个名为“compressed.gz”的输出文件流。然后,我们使用GZIPOutputStream创建一个相应的压缩输出流。在while循环中,我们将从输入文件input.txt读取数据,并将其写入压缩输出流compressed.gz中。最后,我们关闭整个压缩过程。

文件解压是指将一个已经压缩的文件恢复到原始状态。Java提供了ZipInputStream和GZIPInputStream类来完成文件解压缩的任务。

ZipInputStream类可以用于解压缩ZIP格式的文件,下面是一个演示程序:

代码语言:javascript
复制
import java.io.*;
import java.util.zip.*;

public class UnZipExample {

  public static void main(String[] args) {
    byte[] buffer = new byte[1024];

    try {
      ZipInputStream zis = new ZipInputStream(new FileInputStream("compressed.zip"));

      ZipEntry zipEntry = zis.getNextEntry();

      while (zipEntry != null) {
        String fileName = zipEntry.getName();
        FileOutputStream fos = new FileOutputStream(fileName);

        int length;
        while ((length = zis.read(buffer)) > 0) {
          fos.write(buffer, 0, length);
        }

        fos.close();
        zipEntry = zis.getNextEntry();
      }

      zis.closeEntry();
      zis.close();

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

上述代码中,我们首先定义一个名为“compressed.zip”的ZipInputStream输入流,并获取该文件中的第一个条目(即压缩文件中的第一个文件)。接着,在while循环中,我们向文件系统写入读取自该输入流的文件,如果存在更多的条目,则重复进行此操作。最后,我们关闭整个解压缩过程。

GZIPInputStream类可以用于解压缩GZIP格式的文件,下面是一个演示程序:

代码语言:javascript
复制
import java.io.*;
import java.util.zip.*;

public class UnGZIPExample {

  public static void main(String[] args) {
    byte[] buffer = new byte[1024];

    try {
      GZIPInputStream gzipIS = new GZIPInputStream(new FileInputStream("compressed.gz"));

      String fileName = "output.txt";
      FileOutputStream fos = new FileOutputStream(fileName);

      int length;
      while ((length = gzipIS.read(buffer)) > 0) {
        fos.write(buffer, 0, length);
      }

      gzipIS.close();
      fos.close();

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

上述代码中,我们首先定义一个名为“compressed.gz”的GZIPInputStream输入流,并将其读取到一个名为“output.txt”的输出流中。在while循环中,我们将读取自GZIP输入流gzipIS的数据写入名为“output.txt”的输出流中。最后,我们关闭整个解压缩过程。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档