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();
        }
    }
}

在上面的示例中,我们使用了ZipFileZipInputStream类来处理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();