Java对 .CSV 大文件进行拆分多个小文件

文章讨论了在处理6GB大小的CSV文件时遇到的内存问题,提出将大文件拆分为100MB以内的多个小文件以方便读取和下载。方案包括前端展示拆分按钮,用户触发拆分操作后,后台通过异步线程池进行文件拆分,避免阻塞,并在Redis中同步拆分状态。拆分完成后,用户可以下载拆分后的单个文件。
摘要由CSDN通过智能技术生成

先说问题

        偶遇项目数据文件为.csv格式存储,单个数据文件过大,导致程序在读取CSV文件内容时候jvm内存爆表。

        单个文件当时为6G多,通过测试发现,预估数据行约 三百万 数据,文件差不多为90多M。

过大的单个文件电脑也是无法打开的。需要进行拆分目标是拆分到100M以内。

需求与思路 

  1. 文件需要进行页面下载,过大的文件下载有问题,就算下载下来也不可读。
  2. 程序读取一个大的文件也是会出现各种内存问题。
  3. 按照理想将大文件拆分成独立的N个小文件,每个小文件控制在100M以内。

        前端对于大文件不展示下载按钮,展示一个拆分按钮,下载前需要进行大文件的拆分,当然前端用户也可以指定单个文件希望拆分完的大小。

        用户点击拆分按钮后,后台通过异步线程池去做这个事,对于大文件的操作比较耗时,不能一直阻塞,需要通过异步去做这个事,收到请求响应拆分中,可同时在redis中防止一直标识表示该文件在异步拆分中,前端web页面按钮disable不可再次点击展示为 拆分中 ... ,拆分成功后清楚对应标识,下载按钮重新展示,点击后弹出拆分完的文件列表,可进行单个文件下载。

拆分逻辑实现

抓重点说拆分,   累了抽空补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值