批量导出pdf为zip文件(可以修改zip中pdf名称)

核心代码

java 复制代码
  public static void compressZip1(HashMap<String,File> map, String rootPath, String zipFileName) throws FileNotFoundException {
        FileOutputStream fileOutputStream = new FileOutputStream(zipFileName);
        ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(rootPath));

        try {
            for (Map.Entry<String, File> entry : map.entrySet()) {
                String fileName = entry.getKey(); // 获取文件名
                File file = entry.getValue(); // 获取文件

                FileInputStream fileInputStream = new FileInputStream(file);
                zip1(fileInputStream, zipOutputStream, fileName, file);
                fileInputStream.close();
            }

            zipOutputStream.close();
            fileOutputStream.close();
        } catch (IOException e) {
            log.error("context", e);
        }finally {
            try {
                zipOutputStream.close();
                fileOutputStream.close();
            } catch (IOException e) {
                log.error("context", e);
            }
        }
    }

    private static void zip1(FileInputStream fileInputStream,ZipOutputStream zipOutputStream,  String fileName, File file) throws IOException {
        // 设置自定义pdf文件名
        String newFileName = fileName + file.getName();
        ZipEntry zipEntry = new ZipEntry(newFileName);
        zipOutputStream.putNextEntry(zipEntry);

        byte[] buffer = new byte[1024*5];
        BufferedInputStream bufferStream  = new BufferedInputStream(fileInputStream);
        int length;
        // 输入缓冲流
            int read = 0;
//        while ((length = fileInputStream.read(buffer)) > 0) {
        while ((read = bufferStream.read(buffer)) != -1) {
            zipOutputStream.write(buffer, 0, read);
        }

        zipOutputStream.closeEntry();
        bufferStream.close();
    }

注意!!!

这里需要使用BufferedInputStream, 如果用的是FileInputStream 就算flush 有时候还是会文件损坏,我没再深点测试这个为啥得BufferedInputStream

相关推荐
kruptos2 小时前
分布式系统怎么“选主“?Raft 共识一次讲清
开发语言·分布式·php·共识算法
xcl09252 小时前
幼儿托育系统开发实战:从需求分析到上线全流程指南
java·大数据·需求分析
吴声子夜歌2 小时前
ApacheCommons——commons-cli(命令行参数解析)
java·开发语言·apache
小小猪的春天2 小时前
Java 手写第一个 MCP Server:Spring AI MCP 半小时跑通
java·人工智能·spring boot·ai编程
find1star2 小时前
LeetCode 141:环形链表
java·算法·leetcode·链表
今天AI了吗3 小时前
DeepSeek Harness 深度解析:从评测架构到实战落地
java·网络·数据库·人工智能·架构·java-ee
benchmark_cc3 小时前
REST API 和 Python SDK 应该怎么选?量化交易数据接口选型实战
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
王的宝库3 小时前
Go 项目结构:从单文件到标准工程布局
开发语言·后端·golang
Tairitsu_H3 小时前
[C++] 深入理解红黑树:封装set与map
开发语言·c++·set·map·红黑树·模拟实现
许彰午3 小时前
27-AuthService登录链路
java·低代码·架构