java解壓rar,解壓zip

邢帅杰發表於2024-10-10
解壓zip
package com.xcg.webapp.common;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.zip.ZipFile;

public class ZipUtil {
    /**
     * 解壓zip
     */
    public static void unzip(String zipFilePath, String destDir) throws IOException {
        //檔名編碼格式GBK,不是UTF-8
        Charset charset = Charset.forName("GBK");
        ZipFile zipFile = new ZipFile(zipFilePath, charset);
        zipFile.stream()
                .forEach(entry -> {
                    try {
                        File file = new File(destDir, entry.getName());
                        if (entry.isDirectory()) {
                            file.mkdirs();
                        } else {
                            try (InputStream is = zipFile.getInputStream(entry);
                                 FileOutputStream fos = new FileOutputStream(file)) {
                                byte[] buffer = new byte[8192];
                                int len;
                                while ((len = is.read(buffer)) != -1) {
                                    fos.write(buffer, 0, len);
                                }
                            }
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                });
    }
}

解壓rar
POM

        <dependency>
            <groupId>net.sf.sevenzipjbinding</groupId>
            <artifactId>sevenzipjbinding</artifactId>
            <version>16.02-2.01</version>
        </dependency>
        <dependency>
            <groupId>net.sf.sevenzipjbinding</groupId>
            <artifactId>sevenzipjbinding-all-platforms</artifactId>
            <version>16.02-2.01</version>
        </dependency>

code

package com.xcg.webapp.common;

import net.sf.sevenzipjbinding.IInArchive;
import net.sf.sevenzipjbinding.SevenZip;
import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream;

import java.io.File;
import java.io.RandomAccessFile;
import java.util.List;

public class ZipRarUtil {
    private static final String CHINESE_CHARSET = "GBK";

    public static List<String> unRar(File rarFile, String dstDirectoryPath) {

        try (RandomAccessFile randomAccessFile = new RandomAccessFile(rarFile, "r");
             IInArchive archive = SevenZip.openInArchive(null, new RandomAccessFileInStream(randomAccessFile));
        ) {
            int[] in = new int[archive.getNumberOfItems()];
            for (int i = 0; i < in.length; i++) {
                in[i] = i;
            }
            final ExtractCallback extractCallback = new ExtractCallback(archive, dstDirectoryPath);
            archive.extract(in, false, extractCallback);
            archive.close();
            randomAccessFile.close();
            return extractCallback.getNameList();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

參考:https://blog.csdn.net/weixin_49079441/article/details/134176071

相關文章