原文: https://howtodoinjava.com/java/io/unzip-file-with-subdirectories/
Java 代码示例,它使用java.util.zip包从压缩的 zip 文件中解压缩并提取文件。 在此示例中,代码打开一个 zip 文件并以与目录浏览类似的方式开始遍历这些文件。 如果找到目录条目,则创建目录。 如果找到文件条目,则写入解压缩的文件。
解压缩文件示例
import java.io.BufferedInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.nio.file.FileSystem;import java.nio.file.FileSystems;import java.nio.file.Files;import java.nio.file.Path;import java.util.Enumeration;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;public class Main{public static void main(String[] args){//Open the filetry(ZipFile file = new ZipFile("files.zip")){FileSystem fileSystem = FileSystems.getDefault();//Get file entriesEnumeration<? extends ZipEntry> entries = file.entries();//We will unzip files in this folderString uncompressedDirectory = "uncompressed/";Files.createDirectory(fileSystem.getPath(uncompressedDirectory));//Iterate over entrieswhile (entries.hasMoreElements()){ZipEntry entry = entries.nextElement();//If directory then create a new directory in uncompressed folderif (entry.isDirectory()){System.out.println("Creating Directory:" + uncompressedDirectory + entry.getName());Files.createDirectories(fileSystem.getPath(uncompressedDirectory + entry.getName()));}//Else create the fileelse{InputStream is = file.getInputStream(entry);BufferedInputStream bis = new BufferedInputStream(is);String uncompressedFileName = uncompressedDirectory + entry.getName();Path uncompressedFilePath = fileSystem.getPath(uncompressedFileName);Files.createFile(uncompressedFilePath);FileOutputStream fileOutput = new FileOutputStream(uncompressedFileName);while (bis.available() > 0){fileOutput.write(bis.read());}fileOutput.close();System.out.println("Written :" + entry.getName());}}}catch(IOException e){e.printStackTrace();}}}
示例如何运作
下面列出的事情在上面的示例中依次发生。
ZipFile对象表示.zip文件,并用于访问其信息。ZipEntry类表示 zip 文件中的条目-文件或目录。- 每个
ZipEntry实例都具有压缩和未压缩的大小信息,名称以及未压缩字节的输入流。 - 使用
InputStream和BufferedInputStream,我们将未压缩的字节读入字节缓冲区,然后使用FileOutputStream将其写入文件。 - 继续这样做,直到处理完整个文件。
将我的问题放在评论部分。
学习愉快!
