java多个文件生成zip包并下载

java多文件打包成zip

java多个文件生成zip包并下载

代码

   /*
     *导出zip
     * 情报汇集:biz inform summary 原始文件和序列化后的文件都存,通过surmaryTypeld宇段区分 0:原始文件 1:序列化后的文件
     *情报分发:biz inform distribution 只存原始文件 primary.bcp
     *存储管理:biz_data store 只存序列化后的文件 json.bcp
     * 采集管理:biz_data_capture 只存原始文件 primary.bcp
     */
    @GetMapping("/exportZip")
    public void exportZip(HttpServletResponse response, Long id) {
        BizDataStore dataStore = bizDataStoreService.selectBizDataStoreByDataStoreld(id);
        // 1 数据存储、2 - 数据采集、3:情报汇集、4:情报分发、
        bizDatastoreService.exportZip(response, datastore.getFilePrefix0, "json.bcp ", datastore.getFilePath);
    }

    /**
     * 导出ZIP
     * 10.25.68.54: biz inform summary原始文件和序列化后的文件都存,通过summaryTypeld字段区分 0:原始文件1:序列化后的文件情报分发:bizinform distribution 只存原始文件存储管理:biz data store 只存序列化后的文件*采集管理: biz data capture 只存原始文件
     *
     * @param response
     * @param filePrefix文件前缀 2023-03-25 703 10.25.68.37*
     * @param suffix文件后缀json.bcp 或者primary.bcp
     * @param filePath 文件路径/ldfz-file/distribute/10/65/
     **/
    void exportZip(HttpServletResponse response, String filePrefix, String suffix, String filePath);


   /**
     * 导出ZIP
     * 情报汇集:biz_inform summary 原始文件和序列化后的文件都存,通过summaryTypeld字段区分 0:原始文件1:序列化后的文件
     * 情报分发:biz inform distribution 只存原始文件
     * 存储管理:bizdata store 只存序列化后的文件
     * 采集管理:biz datal capture 只存原始文件
     * 完整路径: /usr/local/soft/minio/ldfz-file/distribute/10/65/2023-03-25_703_10.25.68.37_12 primary.bcp
     *
     * @param response
     * @param filePrefix 文件前级 2023-03-25_703_10.25.68.37
     * @param suffix     文件后缀 ison.bcp 或者 primary.bcp
     * @param filePath   文件路径 ndfz-file/distribute/10/65/
     */
    @Override
    public void exportZip(HttpServletResponse response, String filePrefix, String suffix, String filePath) {
        try {
            ZipOutputStream zipos = new ZipOutputStream(response.getOutputStream());
            //根据文件路径查找文件夹,在文件夹中根据文件前级 查找所有文件名称
            // /us/local/soft/minio/Idfz-file/distribute/10/65hi1
            // filePath: /Idfz-file/distribute/10/65/
            // filePrefix: 2023-03-25_703_10.25.68.37
            List<SysDictData> data = sysDictDataFeignApi.selectDictDataByType("sys.minio.installPath");
            if (CollectionUtils.isNotEmpty(data)) {
                String installPath = data.get(0).getDictValue();
                String fileDir = installPath + filePath;
                StringBuilder strBuilder = new StringBuilder("");
                for (int num = 0; num < 1000; num++) {
                    String fileName = filePrefix + underline + num + underline + suffix;
                    String fileAllPath = fileDir + fileName;
                    File file = new File(fileAllPath);
                    if (file.exists()) {
                        strBuilder.append(fileAllPath + ";");
                    } else {
                        break;
                    }
                }
                ZipUtil.compressFileToZip("", strBuilder.toString(), zipos);
                zipos.finish();
            }
        } catch (IOException e) {
            log.error("zip出现异常" + e)
        }
    }

  /**
     * 压缩文件或者文件夹支持多层文件夹
     *
     * @param parentFilePath 文件的父级路径可以不填写
     * @param filePaths      文件/件夹 全路径包含文件名用逗号分割
     * @param zos
     */
    public static void compressFileToZip(String parentFilePath, String filePaths, ZipOutputStream zos) {
        String[] fileList = filePaths.split(":");
        for (String filePath : fileList) {
            File sourceFile = new File(filePath);
            if (!sourceFile.exists()) {
                return;
            }
            String zipEntryName = parentFilePath + "/" + sourceFile.getName();
            if (parentFilePath.isEmpty()) {
                zipEntryName = sourceFile.getName();
            }
            if (sourceFile.isDirectory()) {
                File[] childFiles = sourceFile.listFiles();
                if (Objects.isNull(childFiles)) {
                    return;
                }
                for (File childFile : childFiles) {
                    compressFileToZip(zipEntryName, childFile.getAbsolutePath(), zos);
                }
            } else {
                //文件
                int len = -1;
                byte[] buf = new byte[1024];
                try (InputStream in = new BufferedInputStream(new FileInputStream(sourceFile))) {
                    zos.putNextEntry(new ZipEntry(zipEntryName));
                    while ((len = in.read(buf)) != -1) {
                        zos.write(buf, 0, len);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Java选择指定的多个目录来生成zip文件,并下载,可以按照以下步骤进行: 1. 首先,使用Java文件操作类(如File)获取到指定的多个目录路径。 2. 使用Java的压缩类(如ZipOutputStream)创建一个zip文件。 3. 遍历指定的多个目录,逐个将目录下的文件添加到zip文件中。可以使用递归来处理子目录。 4. 添加完所有文件后,关闭zip文件。 5. 将生成zip文件通过Java的网络编程(如Servlet)发送给客户端进行下载。 以下是一个简单的示例代码,用于实现上述功能: ```java import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipMultipleDirectories { public static void main(String[] args) throws IOException { String[] directories = {"/path/to/directory1", "/path/to/directory2"}; // 替换为实际的目录路径 String zipFilePath = "/path/to/output.zip"; // 替换为实际的zip文件路径 // 创建zip文件输出流 FileOutputStream fos = new FileOutputStream(zipFilePath); ZipOutputStream zipOut = new ZipOutputStream(fos); // 遍历指定的多个目录,逐个添加文件zip文件中 for (String directory : directories) { File file = new File(directory); zipDirectory(file, file.getName(), zipOut); } // 关闭zip文件输出流 zipOut.close(); fos.close(); // TODO: 将生成zip文件送给客户端进行下载 } private static void zipDirectory(File directory, String parentPath, ZipOutputStream zipOut) throws IOException { File[] files = directory.listFiles(); byte[] buffer = new byte[1024]; int length; for (File file : files) { if (file.isFile()) { FileInputStream fis = new FileInputStream(file); zipOut.putNextEntry(new ZipEntry(parentPath + "/" + file.getName())); while ((length = fis.read(buffer)) > 0) { zipOut.write(buffer, 0, length); } fis.close(); } else if (file.isDirectory()) { zipDirectory(file, parentPath + "/" + file.getName(), zipOut); } } } } ``` 请将示例代码中的`/path/to/directory1`和`/path/to/directory2`替换为实际的目录路径,将`/path/to/output.zip`替换为实际的zip文件路径。在代码中的TODO处,需要根据实际情况将生成zip文件送给客户端进行下载,可以使用Java的网络编程技术(如Servlet)来完

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值