File对文件夹、文件进行压缩

本文介绍了一个用于文件夹压缩的实用工具类,支持将指定文件夹及其内容压缩成ZIP格式,并直接提供下载。该工具利用Java标准库实现,适用于Web应用中的文件打包场景。

对文件夹或者文件进行压缩工具类

import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * @author 阿杰
 * @effect 文件夹压缩下载
 * @date 2022/3/18
 * @versions 1.0
 */
public class FolderToZipUtil {

    public static void zip(String sourceFileName, HttpServletResponse response){
        ZipOutputStream out = null;
        BufferedOutputStream bos = null;
        try {
            //将zip以流的形式输出到前台
            response.setHeader("content-type", "application/octet-stream");
            response.setCharacterEncoding("utf-8");
            // 设置浏览器响应头对应的Content-disposition
            //参数中 testZip 为压缩包文件名,尾部的.zip 为文件后缀
            response.setHeader("Content-disposition",
                    "attachment;filename=" + new String("seccessZip".getBytes("gbk"), "iso8859-1")+".zip");
            //创建zip输出流
            out = new ZipOutputStream(response.getOutputStream());
            //创建缓冲输出流
            bos = new BufferedOutputStream(out);
            File sourceFile = new File(sourceFileName);
            //调用压缩函数
            compress(out, bos, sourceFile, sourceFile.getName());
            out.flush();

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            IOCloseUtil.close(bos, out);
        }
    }

    /**
     * 文件压缩
     * @param out
     * @param bos
     * @param sourceFile
     * @param base
     */
    public static void compress(ZipOutputStream out, BufferedOutputStream bos, File sourceFile, String base){
        FileInputStream fos = null;
        BufferedInputStream bis = null;
        try {
            //如果路径为目录(文件夹)
            if (sourceFile.isDirectory()) {
                //取出文件夹中的文件(或子文件夹)
                File[] flist = sourceFile.listFiles();
                if (flist.length == 0) {//如果文件夹为空,则只需在目的地zip文件中写入一个目录进入点
                    out.putNextEntry(new ZipEntry(base + "/"));
                } else {//如果文件夹不为空,则递归调用compress,文件夹中的每一个文件(或文件夹)进行压缩
                    for (int i = 0; i < flist.length; i++) {
                        compress(out, bos, flist[i], base + "/" + flist[i].getName());
                    }
                }
            } else {//如果不是目录(文件夹),即为文件,则先写入目录进入点,之后将文件写入zip文件中
                out.putNextEntry(new ZipEntry(base));
                fos = new FileInputStream(sourceFile);
                bis = new BufferedInputStream(fos);

                int tag;
                //将源文件写入到zip文件中
                while ((tag = bis.read()) != -1) {
                    out.write(tag);
                }
                bis.close();
                fos.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            IOCloseUtil.close(bis,fos);
        }
    }
}

import java.io.Closeable;
import java.io.IOException;

/**
 * @author 阿杰
 * @effectI O流关闭工具Utils
 * @date 2022/3/18
 * @versions 1.0
 */
public class IOCloseUtil {

    /**
     *   IO流关闭工具类
     */
    public static void close(Closeable... io) {
        for (Closeable temp : io) {
            try {
                if (null != temp)
                    temp.close();
            } catch (IOException e) {
                System.out.println("" + e.getMessage());
            }
        }
    }

    public static <T extends Closeable> void closeAll(T... io) {
        for (Closeable temp : io) {
            try {
                if (null != temp)
                    temp.close();
            } catch (IOException e) {
                System.out.println("" + e.getMessage());
            }
        }

    }
}
QZipWriter是一个可以用来进行文件夹文件压缩的方法。它是一个在Qt框架下提供的简单易用的压缩库。 首先,我们需要通过引入QZipWriter类来创建一个QZipWriter实例。例如,可以使用以下代码创建一个名为"compressed.zip"的ZIP文件: ```cpp QZipWriter zipWriter("compressed.zip"); ``` 接下来,我们可以通过调用QZipWriter的`addDirectory()`方法来将文件夹添加到ZIP文件中,或者通过`addFile()`方法来将文件添加到ZIP文件中。例如,以下代码将一个名为"folder"的文件夹添加到ZIP文件中: ```cpp zipWriter.addDirectory("folder"); ``` 或者,我们可以添加一个名为"file.txt"的文件到ZIP文件中,如下所示: ```cpp zipWriter.addFile("file.txt", "/path/to/file.txt"); ``` 在使用`addFile()`方法时,第一个参数是要在ZIP文件中显示的文件名称,而第二个参数是要添加到ZIP文件中的实际文件路径。 最后,在完成所有文件文件夹的添加后,我们应该调用`close()`方法来关闭QZipWriter实例,以便将所有数据写入ZIP文件中。以下是一个完整的例子: ```cpp QZipWriter zipWriter("compressed.zip"); zipWriter.addDirectory("folder"); zipWriter.addFile("file.txt", "/path/to/file.txt"); zipWriter.close(); ``` 通过这种方式,我们可以使用QZipWriter的addDirectory()和addFile()方法,轻松地对文件夹文件进行压缩。这使得在Qt应用程序中进行文件文件夹压缩变得非常简单和高效。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菜鸟小杰子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值