1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package com.onemap.file.utils;
- import com.github.junrar.Archive;
- import com.github.junrar.rarfile.FileHeader;
- import net.lingala.zip4j.core.ZipFile;
- import java.io.File;
- import java.io.FileOutputStream;
- /**
- * @author : wangping
- * @createDate: 2021/7/12
- * @description:解压缩工具
- **/
- public class UnPackageUtils {
- /**
- * zip文件解压
- *
- * @param destPath 解压文件路径
- * @param zipFile 压缩文件
- * //* @param password 解压密码(如果有)
- */
- public static void unPackZip(File zipFile, String destPath) {
- try {
- ZipFile zip = new ZipFile(zipFile);
- /*zip4j默认用GBK编码去解压,这里设置编码为GBK的*/
- zip.setFileNameCharset("GBK");
- zip.extractAll(destPath);
- // 如果解压需要密码
- // if (zip.isEncrypted()) {
- // zip.setPassword(password);
- // }
- } catch (Exception e) {
- }
- }
- /**
- * rar文件解压(不支持有密码的压缩包)
- *
- * @param rarFile rar压缩包
- * @param destPath 解压保存路径
- */
- public static void unPackRar(File rarFile, String destPath) {
- try (Archive archive = new Archive(rarFile)) {
- if (null != archive) {
- FileHeader fileHeader = archive.nextFileHeader();
- File file = null;
- while (null != fileHeader) {
- // 防止文件名中文乱码问题的处理
- String fileName = fileHeader.getFileNameW().isEmpty() ? fileHeader.getFileNameString() : fileHeader.getFileNameW();
- if (fileHeader.isDirectory()) {
- //是文件夹
- file = new File(destPath + File.separator + fileName);
- file.mkdirs();
- } else {
- //不是文件夹
- file = new File(destPath + File.separator + fileName.trim());
- if (!file.exists()) {
- if (!file.getParentFile().exists()) {
- // 相对路径可能多级,可能需要创建父目录.
- file.getParentFile().mkdirs();
- }
- file.createNewFile();
- }
- FileOutputStream os = new FileOutputStream(file);
- archive.extractFile(fileHeader, os);
- os.close();
- }
- fileHeader = archive.nextFileHeader();
- }
- }
- } catch (Exception e) {
- }
- }
- }
|