批量导出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

相关推荐
Swift社区2 小时前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift
没头脑的ht2 小时前
Swift内存访问冲突
开发语言·ios·swift
没头脑的ht2 小时前
Swift闭包的本质
开发语言·ios·swift
wjs20242 小时前
Swift 数组
开发语言
吾日三省吾码3 小时前
JVM 性能调优
java
stm 学习ing3 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
湫ccc4 小时前
《Python基础》之字符串格式化输出
开发语言·python
弗拉唐4 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
CodeCraft Studio4 小时前
【实用技能】使用 TX Text Control 创建带有嵌入式附件的 PDF 文档
pdf·asp.net·.net