java 解压rar压缩包

记录下引入maven的相关坐标后,在archivers包下没有找到rar包

import org.apache.commons.compress.archivers.rar.RarArchiveEntry;

Java本身不提供解压RAR压缩包的功能,需要借助第三方库来实现。以下是使用Apache Commons Compress库来解压RAR压缩包的示例代码:

import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.rar.RarArchiveEntry;
import org.apache.commons.compress.archivers.rar.RarArchiveInputStream;
import org.apache.commons.io.IOUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class RarExtractor {
    public static void extract(String rarFile, String destDir) throws IOException, ArchiveException {
        File destinationDir = new File(destDir);
        if (!destinationDir.exists()) {
            destinationDir.mkdirs();
        }
        try (ArchiveInputStream in = new ArchiveStreamFactory()
                .createArchiveInputStream(ArchiveStreamFactory.RAR, new FileInputStream(rarFile))) {
            RarArchiveInputStream rarIn = (RarArchiveInputStream) in;
            RarArchiveEntry entry;
            while ((entry = (RarArchiveEntry) rarIn.getNextEntry()) != null) {
                if (entry.isDirectory()) {
                    new File(destinationDir, entry.getName()).mkdirs();
                } else {
                    File outputFile = new File(destinationDir, entry.getName());
                    FileOutputStream out = new FileOutputStream(outputFile);
                    IOUtils.copy(rarIn, out);
                    out.close();
                }
            }
        }
    }
    public static void main(String[] args) throws IOException, ArchiveException {
        String rarFile = "path/to/your/rar/file.rar";
        String destDir = "path/to/your/destination/directory";
        extract(rarFile, destDir);
    }
}

这个示例代码通过解析RAR文件的文件头来提取压缩包中的文件。在解压过程中,他们将提取的内容写入到目标目录中的新文件中。要使用此示例代码,你需要先将Apache Commons Compress库添加到你的Java项目的类路径中。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Java可以使用Apache Commons Compress库来解压RAR压缩包和嵌套的GZ压缩包。以下是一个示例代码: ```java import org.apache.commons.compress.archivers.ArchiveEntry; import org.apache.commons.compress.archivers.ArchiveInputStream; import org.apache.commons.compress.archivers.ArchiveStreamFactory; import org.apache.commons.compress.compressors.CompressorInputStream; import org.apache.commons.compress.compressors.CompressorStreamFactory; import java.io.*; public class Unpacker { public static void main(String[] args) throws IOException, ArchiveException { String rarFilePath = "path/to/rar/file.rar"; String outputDirPath = "path/to/output/dir"; // 创建RAR文件输入流 FileInputStream rarFileInputStream = new FileInputStream(rarFilePath); ArchiveInputStream rarArchiveInputStream = new ArchiveStreamFactory().createArchiveInputStream(ArchiveStreamFactory.RAR, rarFileInputStream); // 遍历RAR文件中的所有文件 ArchiveEntry rarEntry; while ((rarEntry = rarArchiveInputStream.getNextEntry()) != null) { String entryName = rarEntry.getName(); long entrySize = rarEntry.getSize(); // 如果是GZ文件,则继续解压 if (entryName.endsWith(".gz")) { // 创建GZ文件输入流 InputStream gzInputStream = new BufferedInputStream(rarArchiveInputStream); CompressorInputStream gzCompressorInputStream = new CompressorStreamFactory().createCompressorInputStream(CompressorStreamFactory.GZIP, gzInputStream); // 创建输出流,将解压后的文件写入输出流 String outputFilePath = outputDirPath + File.separator + entryName.substring(0, entryName.length() - 3); FileOutputStream outputStream = new FileOutputStream(outputFilePath); byte[] buffer = new byte[1024]; int n; while ((n = gzCompressorInputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, n); } // 关闭输出流和GZ文件输入流 outputStream.close(); gzCompressorInputStream.close(); } } // 关闭RAR文件输入流 rarArchiveInputStream.close(); rarFileInputStream.close(); } } ``` 在上面的示例代码中,我们首先创建一个RAR文件输入流,然后使用Apache Commons Compress库的`ArchiveStreamFactory.createArchiveInputStream()`方法创建一个RAR文件归档输入流。接下来,我们遍历RAR文件中的所有文件,如果发现一个GZ文件,就创建一个GZ文件输入流,使用Apache Commons Compress库的`CompressorStreamFactory.createCompressorInputStream()`方法创建一个GZ文件压缩输入流。然后,我们创建一个输出流,将解压后的文件写入输出流。最后,我们关闭所有的输入流和输出流。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值