Java解压缩Zip和Rar文件
在Java开发中,经常会遇到需要解压缩Zip和Rar文件的情况。本文将介绍如何使用Java代码解压缩这两种常见的压缩格式,并通过代码示例来演示。
1. 解压缩Zip文件
1.1 导入相关库
首先,我们需要导入java.util.zip
包,这个包提供了用于处理Zip文件的类和接口。
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
1.2 解压缩Zip文件
下面是一个简单的代码示例,展示了如何解压缩一个Zip文件。
public class UnzipExample {
public static void main(String[] args) {
String zipFilePath = "path/to/zip/file.zip";
String destDirectory = "path/to/destination/folder";
try {
ZipFile zipFile = new ZipFile(zipFilePath);
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFilePath));
// 创建目标文件夹
File destDir = new File(destDirectory);
if (!destDir.exists()) {
destDir.mkdir();
}
// 遍历Zip文件中的所有条目
ZipEntry zipEntry;
while ((zipEntry = zipInputStream.getNextEntry()) != null) {
String entryName = zipEntry.getName();
String filePath = destDirectory + File.separator + entryName;
// 如果当前条目是文件夹,则创建文件夹
if (zipEntry.isDirectory()) {
File dir = new File(filePath);
dir.mkdir();
continue;
}
// 创建新文件,并将Zip文件中的内容复制到新文件中
FileOutputStream fos = new FileOutputStream(filePath);
byte[] buffer = new byte[1024];
int length;
while ((length = zipInputStream.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
fos.close();
zipInputStream.closeEntry();
}
// 关闭Zip文件和输入流
zipInputStream.close();
zipFile.close();
System.out.println("Zip文件解压缩完成!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上面的示例中,我们使用了ZipFile
和ZipInputStream
类来处理Zip文件。首先,我们通过ZipFile
类创建了一个ZipFile
对象,然后通过ZipInputStream
类创建了一个ZipInputStream
对象。
接下来,我们遍历Zip文件中的所有条目,判断每个条目是文件夹还是文件。如果是文件夹,我们通过mkdir()
方法创建对应的文件夹;如果是文件,我们则创建一个新文件,并将Zip文件中的内容复制到新文件中。
最后,我们关闭了Zip文件和输入流,并输出了解压缩完成的提示信息。
2. 解压缩Rar文件
2.1 导入相关库
解压缩Rar文件需要使用第三方库,比如com.github.junrar
库。我们可以通过Maven来导入这个库。
<dependency>
<groupId>com.github.junrar</groupId>
<artifactId>junrar</artifactId>
<version>1.0.0</version>
</dependency>
2.2 解压缩Rar文件
下面是一个示例代码,展示了如何解压缩一个Rar文件。
public class UnrarExample {
public static void main(String[] args) {
String rarFilePath = "path/to/rar/file.rar";
String destDirectory = "path/to/destination/folder";
try {
Archive archive = new Archive(new File(rarFilePath));
// 创建目标文件夹
File destDir = new File(destDirectory);
if (!destDir.exists()) {
destDir.mkdir();
}
// 遍历Rar文件中的所有条目
FileHeader fileHeader = archive.nextFileHeader();
while (fileHeader != null) {
String entryName = fileHeader.getFileNameString();
String filePath = destDirectory + File.separator + entryName;
// 如果当前条目是文件夹,则创建文件夹
if (fileHeader.isDirectory()) {
File dir = new File(filePath);
dir.mkdir();
continue;
}
// 创建新文件,并将Rar文件中的内容复制到新文件中
FileOutputStream fos = new FileOutputStream(filePath);
archive.extractFile(fileHeader, fos);
fos.close();