Java解压zip和rar文件

在Java中,我们可以使用一些库来解压缩zip和rar文件。本文将介绍如何使用java.util.ziporg.apache.commons.compress库来进行解压缩操作,并提供示例代码。

解压zip文件

java.util.zip包提供了用于压缩和解压缩文件的类和接口。其中,ZipInputStreamZipEntry类可用于解压缩zip文件。

首先,我们需要创建一个ZipInputStream对象,并通过FileInputStream将zip文件的路径传递给它。然后,我们可以使用getNextEntry()方法获取zip文件中的每个条目(文件或目录)。

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class UnzipExample {
    public static void unzip(String zipFilePath, String destDir) throws IOException {
        File destDirectory = new File(destDir);
        if (!destDirectory.exists()) {
            destDirectory.mkdir();
        }
        
        ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
        ZipEntry entry = zipIn.getNextEntry();
        
        while (entry != null) {
            String filePath = destDir + File.separator + entry.getName();
            if (!entry.isDirectory()) {
                extractFile(zipIn, filePath);
            } else {
                File dir = new File(filePath);
                dir.mkdir();
            }
            zipIn.closeEntry();
            entry = zipIn.getNextEntry();
        }
        zipIn.close();
    }
    
    private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
        byte[] bytesIn = new byte[4096];
        int read;
        
        while ((read = zipIn.read(bytesIn)) != -1) {
            bos.write(bytesIn, 0, read);
        }
        bos.close();
    }
}

在上面的代码中,我们定义了一个unzip()方法来解压缩zip文件。该方法接受两个参数:zip文件的路径和目标目录的路径。在方法中,我们使用mkdir()方法创建目标目录,然后通过getNextEntry()方法遍历zip文件中的条目。对于每个条目,我们判断它是文件还是目录,然后分别调用extractFile()方法解压文件或创建目录。

现在,我们可以在我们的应用程序中使用UnzipExample类来解压缩zip文件。

public class Main {
    public static void main(String[] args) {
        String zipFilePath = "path/to/your/zip/file.zip";
        String destDir = "path/to/your/destination/directory";
        
        try {
            UnzipExample.unzip(zipFilePath, destDir);
            System.out.println("Zip file was successfully extracted.");
        } catch (IOException e) {
            System.out.println("Failed to extract zip file: " + e.getMessage());
        }
    }
}

在上面的示例中,我们提供了zip文件的路径和目标目录的路径。然后,我们调用unzip()方法来解压缩zip文件。如果解压缩成功,将打印一条成功信息;否则,将打印失败信息。

解压rar文件

相比于zip文件,Java没有内置的库来处理rar文件。但是,我们可以使用第三方库org.apache.commons.compress来解压缩rar文件。

首先,我们需要将以下依赖项添加到我们的项目中的pom.xml文件中(如果使用Maven构建项目):

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.21</version>
</dependency>

然后,我们可以使用ArchiveStreamFactory类和ArchiveEntry接口来解压缩rar文件。

import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;

import java.io.*;

public class UnrarExample {
    public static void unrar(String rarFilePath, String destDir) throws IOException {
        ArchiveStreamFactory factory = new ArchiveStreamFactory();
        ArchiveInputStream rarIn = factory.createArchiveInputStream("rar", new FileInputStream(rarFilePath));
        ArchiveEntry entry = rarIn.getNextEntry();
        
        while (entry != null) {
            String filePath = destDir + File.separator + entry.getName();
            if (!entry.isDirectory()) {
                extractFile(rarIn, filePath);
            } else {
                File dir = new File(filePath);
                dir.mkdir();
            }
            entry = rarIn.getNextEntry();
        }
        rarIn.close();
    }
    
    private static