java实现压缩包(zip,rar)解压缩

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.12</version>
</dependency>
 
<dependency>
    <groupId>com.github.junrar</groupId>
    <artifactId>junrar</artifactId>
    <version>3.0.0</version>
</dependency>
import java.io.*;
import java.util.Enumeration;

import com.github.junrar.rarfile.FileHeader;
import com.github.junrar.Archive;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import pie.engine.server.tools.utils.SnowIdUtils;

/**
 * 解压文件工具类
 *
 * @author zhangyongbo
 */
public class UnZipAnRarUtil {
    private static final int buffer = 2048;

    /**
     * 解压Zip文件
     *
     * @param file 文件目录
     */
    public static File unZip(File file) {
        int count;
        InputStream is = null;
        FileOutputStream fos = null;
        BufferedOutputStream bos = null;
        String savepath = "src/main/temporary/";
        savepath += SnowIdUtils.uniqueLongHex() + "/";
        new File(savepath).mkdir(); //创建保存目录
        ZipFile zipFile = null;
        try {
            zipFile = new ZipFile(file, "gbk"); //解决中文乱码问题
            Enumeration<?> entries = zipFile.getEntries();
            while (entries.hasMoreElements()) {
                byte[] buf = new byte[buffer];
                ZipEntry entry = (ZipEntry) entries.nextElement();
                String filename = entry.getName();
                boolean ismkdir = filename.lastIndexOf("/") != -1;
                //检查此文件是否带有文件夹
                filename = savepath + filename;
                if (entry.isDirectory()) { //如果是文件夹先创建
                    file = new File(filename);
                    file.mkdirs();
                    continue;
                }
                file = new File(filename);
                if (!file.exists()) { //如果是目录先创建
                    if (ismkdir) {
                        new File(filename.substring(0, filename.lastIndexOf("/"))).mkdirs(); //目录先创建
                    }
                }
                file.createNewFile(); //创建文件
                is = zipFile.getInputStream(entry);
                fos = new FileOutputStream(file);
                bos = new BufferedOutputStream(fos, buffer);
                while ((count = is.read(buf)) > -1) {
                    bos.write(buf, 0, count);
                }
                bos.flush();
                bos.close();
                fos.close();
                is.close();
                break;
            }
            zipFile.close();
            return file;
        } catch (IOException ioe) {
            ioe.printStackTrace();
            return file;
        } finally {
            try {
                if (bos != null) {
                    bos.close();
                }
                if (fos != null) {
                    fos.close();
                }
                if (is != null) {
                    is.close();
                }
                if (zipFile != null) {
                    zipFile.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


    /**
     * 解压Rar文件
     *
     * @param file 文件目录
     */
    public static File unRar(File rarFile) throws Exception {
        String outDir = "src/main/temporary/" + SnowIdUtils.uniqueLongHex() + "/";
        File outFileDir = new File(outDir);
        if (!outFileDir.exists()) {
            boolean isMakDir = outFileDir.mkdirs();
            if (isMakDir) {
                System.out.println("创建压缩目录成功");
            }
        }
        System.out.println(rarFile.getName());
        Archive archive = new Archive(new FileInputStream(rarFile));
        FileHeader fileHeader = archive.nextFileHeader();
        File out = null;
        while (fileHeader != null) {
            if (fileHeader.isDirectory()) {
                fileHeader = archive.nextFileHeader();
                continue;
            }
            out = new File(outDir + fileHeader.getFileNameString());
            if (!out.exists()) {
                if (!out.getParentFile().exists()) {
                    out.getParentFile().mkdirs();
                }
                out.createNewFile();
            }
            FileOutputStream os = new FileOutputStream(out);
            archive.extractFile(fileHeader, os);

            os.close();
            break;
        }
        archive.close();
        return out;
    }


}

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Linux中,可以使用zip命令来进行压缩和解压缩操作。下面是一些常用的zip命令选项和示例: 1. 压缩目录: ``` zip -r mydata.zip mydata ``` 这个命令将会把/home目录下的mydata目录压缩为mydata.zip文件。 2. 解压缩到指定目录: ``` unzip mydata.zip -d mydatabak ``` 这个命令将会把/home目录下的mydata.zip文件解压缩到mydatabak目录中。 3. 压缩多个文件或目录: ``` zip -r abc123.zip abc 123.txt ``` 这个命令将会把/home目录下的abc文件夹和123.txt文件压缩为abc123.zip文件。 4. 直接解压缩到当前目录: ``` unzip wwwroot.zip ``` 这个命令将会把/home目录下的wwwroot.zip文件直接解压缩到当前目录中。 5. 同时解压缩多个文件: ``` unzip abc*.zip ``` 这个命令将会把/home目录下的abc12.zip、abc23.zip、abc34.zip文件同时解压缩到当前目录中。 6. 查看压缩文件的内容: ``` unzip -l wwwroot.zip ``` 这个命令将会显示/home目录下的wwwroot.zip文件中包含的文件列表。 7. 验证压缩文件的完整性: ``` unzip -t wwwroot.zip ``` 这个命令将会验证/home目录下的wwwroot.zip文件是否完整。 8. 解压缩到第一级目录: ``` unzip -j wwwroot.zip -d . ``` 这个命令将会把/home目录下的wwwroot.zip文件中的所有文件解压缩到当前目录的第一级。 这些是一些常用的zip命令选项和示例,你可以根据需要进行相应的操作。 #### 引用[.reference_title] - *1* *2* [linux zip文件解压命令详解](https://blog.csdn.net/weixin_51113465/article/details/123604785)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BUG制造者木容

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值