Java 解压zip和rar

1、前言

解压zip相对简单,rar解压目前不支持版本5.0及以上,用户使用的软件版本小于5.0才能正常解压

Java代码解压rar文件

2、pom

        <!--rar解压缩-->
        <dependency>
            <groupId>com.github.junrar</groupId>
            <artifactId>junrar</artifactId>
            <version>7.5.3</version>
        </dependency>

原理

import com.github.junrar.Archive;
import com.github.junrar.rarfile.FileHeader;

import java.io.File;
import java.io.FileInputStream;
import java.nio.charset.Charset;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class ZIPRARUtil {
    public static boolean zipHasDcmFile(File file) {
        ZipInputStream zin = null;
        FileInputStream fis = null;
        try {
            Charset gbk = Charset.forName("GBK");
            fis = new FileInputStream(file);
            zin = new ZipInputStream(fis, gbk);
            ZipEntry ze = null;
            while ((ze = zin.getNextEntry()) != null) {
                //String path = ze.getName();
                //System.out.println("path" + path);
                if (!ze.isDirectory() && ze.toString().endsWith(".dcm")) {
                    return true;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (zin != null) {
                    zin.closeEntry();
                    zin.close();
                }
                if (fis != null)
                    fis.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return false;
    }

    public static boolean rarHasDcmFile(File file) {
        FileInputStream fis = null;
        Archive archive = null;
        try {
            fis = new FileInputStream(file);
            archive = new Archive(fis);
            List<FileHeader> fileHeaderList = archive.getFileHeaders();
            for (FileHeader header : fileHeaderList) {
                //System.out.println("header=" + header.getFileNameString());
                if (!header.isDirectory() && header.getFileNameString().endsWith(".dcm")) {
                    return true;
                }
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
                if (archive != null) {
                    fis.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return false;
    }
}
posted @ 2022-08-11 17:44  一只桔子2233  阅读(722)  评论(0编辑  收藏  举报