Java解压缩文件教程:详细示例与代码实现
欢迎来到Java解压文件示例教程。在上一篇文章中,我们学习了如何在Java中压缩文件和目录,现在我们将解压相同的压缩文件,将其从一个目录解压到另一个输出目录中。
Java文件解压
要解压缩一个ZIP文件,我们需要使用ZipInputStream读取ZIP文件,然后逐个读取所有的ZipEntry。然后使用FileOutputStream将它们写入文件系统。如果输出目录不存在,我们还需要创建该目录以及ZIP文件中的任何嵌套目录。这是一个Java解压缩文件的程序,将之前创建的tmp.zip解压缩到输出目录中。
package com.Olivia.files;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class UnzipFiles {
public static void main(String[] args) {
String zipFilePath = "/Users/scdev/tmp.zip"; // ZIP文件路径
String destDir = "/Users/scdev/output"; // 目标目录
unzip(zipFilePath, destDir);
}
private static void unzip(String zipFilePath, String destDir) {
File dir = new File(destDir);
// 如果输出目录不存在,则创建
if(!dir.exists()) dir.mkdirs();
FileInputStream fis;
// 用于读写文件的缓冲区
byte[] buffer = new byte[1024];
try {
fis = new FileInputStream(zipFilePath);
ZipInputStream zis = new ZipInputStream(fis);
ZipEntry ze = zis.getNextEntry();
while(ze != null){
String fileName = ze.getName();
File newFile = new File(destDir + File.separator + fileName);
System.out.println("解压到 "+newFile.getAbsolutePath());
//为ZIP中的子目录创建目录
new File(newFile.getParent()).mkdirs();
FileOutputStream fos = new FileOutputStream(newFile);
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
//关闭当前ZipEntry
zis.closeEntry();
ze = zis.getNextEntry();
}
//关闭最后一个ZipEntry
zis.closeEntry();
zis.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
一旦程序结束,我们就可以在输出文件夹中获得所有压缩文件的内容,且目录层级结构与原始文件相同。以上程序的输出为:
解压到 /Users/scdev/output/.DS_Store
解压到 /Users/scdev/output/data/data.dat
解压到 /Users/scdev/output/data/data.xml
解压到 /Users/scdev/output/data/xmls/project.xml
解压到 /Users/scdev/output/data/xmls/web.xml
解压到 /Users/scdev/output/data.Xml
解压到 /Users/scdev/output/DB.xml
解压到 /Users/scdev/output/item.XML
解压到 /Users/scdev/output/item.xsd
解压到 /Users/scdev/output/ms/data.txt
解压到 /Users/scdev/output/ms/project.doc
这就是关于Java解压缩文件示例的全部内容。