📅  最后修改于: 2023-12-03 15:36:15.384000             🧑  作者: Mango
本程序展示了如何使用 Java 中的 ZipFile 类从 Zip 文件中读取所有文件,以及如何打印出这些文件的内容。以下是程序的详细介绍。
ZipFile 类是 Java 中用来支持 ZIP 归档文件形式的一种类。它可以打开一个指定的 ZIP 文件以及读取其中的特定文件。ZipFile 类是从 java.util.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 的用法。