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

2023-12-15 12:56:40 浏览数 (2)

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”的输出流中。最后,我们关闭整个解压缩过程。

0 人点赞