📜  从 Zip 文件读取和打印所有文件的Java程序(1)

📅  最后修改于: 2023-12-03 15:36:15.384000             🧑  作者: Mango

从 Zip 文件读取和打印所有文件的 Java 程序

本程序展示了如何使用 Java 中的 ZipFile 类从 Zip 文件中读取所有文件,以及如何打印出这些文件的内容。以下是程序的详细介绍。

ZipFile 类

ZipFile 类是 Java 中用来支持 ZIP 归档文件形式的一种类。它可以打开一个指定的 ZIP 文件以及读取其中的特定文件。ZipFile 类是从 java.util.zip 包中获得的。

从 Zip 文件中读取文件

以下是从 Zip 文件中读取文件的代码,它通过遍历所有 ZipEntry 对象并使用 InputStream 读取每个 ZipEntry 的内容来完成这项工作。

import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class ReadZipFileDemo {
  public static void main(String[] args) {
    try {
      ZipFile zipFile = new ZipFile("example.zip");
      Enumeration<? extends ZipEntry> entries = zipFile.entries();
      while (entries.hasMoreElements()) {
        ZipEntry entry = entries.nextElement();
        System.out.println("Contents of " + entry.getName() + ":");
        InputStream is = zipFile.getInputStream(entry);
        int content;
        while ((content = is.read()) != -1) {
          System.out.print((char) content);
        }
        System.out.println();
      }
      zipFile.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

在上面的代码中,我们先创建了一个 ZipFile 对象,传入的参数为要读取的 Zip 文件的路径。然后使用 entries() 方法获取到 Zip 文件中的所有文件,返回的是一个 Enumeration 对象。我们通过遍历这个 Enumeration 对象中的 ZipEntry 对象,并针对每个 ZipEntry 进行读取操作,读取时可以使用 getInputStream 方法获得输入流,最后将输入流中的内容输出即可。

输出每个文件的内容

我们通过上面的代码已经可以从 Zip 文件中读取所有文件,但是只是读取到了每个文件的内容,稍有不慎就可能导致输出的内容混在一起而无法区分各个文件。下面是输出每个文件的内容的代码。我们可以将输出的内容再包装下,比如添加文件名、分隔线等,使其更加清晰明了。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class PrintZipFileDemo {
  public static void main(String[] args) {
    try {
      ZipFile zipFile = new ZipFile("example.zip");
      Enumeration<? extends ZipEntry> entries = zipFile.entries();
      while (entries.hasMoreElements()) {
        ZipEntry entry = entries.nextElement();
        System.out.println("===================\nContents of " + entry.getName() + ":\n--------------------");
        InputStreamReader isr = new InputStreamReader(zipFile.getInputStream(entry));
        BufferedReader br = new BufferedReader(isr);
        String line;
        while ((line = br.readLine()) != null) {
          System.out.println(line);
        }
        br.close();
        isr.close();
      }
      zipFile.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

在上面的代码中,我们对每个文件的内容进行了包装,输出时添加了文件名、分隔线以及打印结束符,方便我们识别每个文件的内容。通过 InputStreamReader 和 BufferedReader 对输入流进行读取操作,这样我们就可以一行行地读取文件内容了。

总结

上面的两段代码分别演示了如何从 Zip 文件中读取所有文件以及如何输出这些文件的内容,需要注意的是,在这个过程中我们必须关闭读取的输入流和 ZipFile 对象。希望本文可以帮助您更好地理解 Java 中 ZipFile 的用法。