Java 解压 rar 文件

1、引入依赖


        <dependency>
            <groupId>com.github.axetgroupId>
            <artifactId>java-unrarartifactId>
            <version>1.7.0-8version>
        dependency>
        <dependency>
            <groupId>net.sf.sevenzipjbindinggroupId>
            <artifactId>sevenzipjbindingartifactId>
            <version>16.02-2.01version>
        dependency>
        <dependency>
            <groupId>net.sf.sevenzipjbindinggroupId>
            <artifactId>sevenzipjbinding-all-platformsartifactId>
            <version>16.02-2.01version>
        dependency>
        

2、解压方法代码

public class FileUtils {

    public static List<String> unRar(String rarPath, String dstDirectoryPath) throws IOException {
        IInArchive archive;
        RandomAccessFile randomAccessFile = new RandomAccessFile(rarPath, "r");
        ;
        // 第一个参数是需要解压的压缩包路径,第二个参数参考JdkAPI文档的RandomAccessFile
        // r代表以只读的方式打开文本,也就意味着不能用write来操作文件
        archive = SevenZip.openInArchive(null,
                new RandomAccessFileInStream(randomAccessFile));
        int[] in = new int[archive.getNumberOfItems()];
        for (int i = 0; i < in.length; i++) {
            in[i] = i;
        }
        archive.extract(in, false, new ExtractCallback(archive, dstDirectoryPath));
        archive.close();
        randomAccessFile.close();
        log.info("rar文件电子回单解压目标文件夹为:{}", dstDirectoryPath);
        return null;
    }

    /**
     * 获取路径下的所有文件/文件夹
     * @param directoryPath 需要遍历的文件夹路径
     * @param isAddDirectory 是否将子文件夹的路径也添加到list集合中
     * @return
     */
    public static List<String> getAllFile(String directoryPath, boolean isAddDirectory) {
        List<String> list = new ArrayList<>();
        File baseFile = new File(directoryPath);
        if (baseFile.isFile() || !baseFile.exists()) {
            return list;
        }
        File[] files = baseFile.listFiles();
        if (ArrayUtil.isEmpty(files)) {
            return new ArrayList<>(0);
        }
        for (File file : files) {
            if (file.isDirectory()) {
                if (isAddDirectory) {
                    list.add(file.getAbsolutePath());
                }
                list.addAll(getAllFile(file.getAbsolutePath(), isAddDirectory));
            } else {
                list.add(file.getAbsolutePath());
            }
        }
        return list;
    }


}

3、将解压方法封装到工具类中

// 解压 rar 文件
if (folderFile.getName().endsWith(".rar") || folderFile.getName().endsWith(".RAR")) {
    try {
        FileUtils.unRar(terminalFilePath + "/" + folderFile.getName(), terminalFilePath);
    } catch (Exception e) {
        throw new DataHandleException("rar 文件解压失败");
    }
}

你可能感兴趣的:(java,开发语言)