当前位置: 首页 > news >正文

java实现大文件的分割与合并

最近遇到一个问题,某网盘上传文件时,文件大小超过了4个G ,不能上传,所以就想到了利用的java的IO流,将文件分割成多个小文件,上传到网盘上,等到需要用的时候,下载下来然后再进行文件的合并就可以了。

这里以分割一个8.85M的PDF文件为例,分割成每个大小为1M的文件,分割文件的大小,只需修改size即可,代码如下:

1.文件的分割

public static void main(String[] args) throws IOException {//要分割出来的文件的大小int size = 1024*1024*1;//1MBufferedInputStream in = new BufferedInputStream(new FileInputStream(new File("D:\\zzy\\aaaa\\fileSplit\\java.pdf")));int len = -1;for (int i = 0; i < 9; i++) { //8.85M的文件分割成8个1M的,和一个0.85M的File file = new File("D:\\zzy\\aaaa\\fileSplit\\" + i + "temp.temp");//分割的文件格式可以随便设置,只要文件合并时名称一致即可FileOutputStream outputStream = new FileOutputStream(file);BufferedOutputStream out = new BufferedOutputStream(outputStream);int count = 0;byte[] bt = new byte[1024 * 1024];//每次读取1M,数组大小不能太大,会内存溢出,通过目标文件大小size判断一下while ((len = in.read(bt)) != -1) {out.write(bt, 0, len);count += len;if(count>=size) {break;//每次读取1M,然后写入到文件中}}out.flush();out.close();outputStream.close();System.out.println("文件已完成:" + file.getName());}System.out.println("文件已完成分割====");}

2.文件的合并

public static void main(String[] args) throws IOException {//文件合并BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File("D:\\zzy\\aaaa\\fileSplit\\java(merge).pdf")));for (int i = 0; i < 9; i++) { //9个文件合并成8.85M的文件File file = new File("D:\\zzy\\aaaa\\fileSplit\\" + i + "temp.temp");FileInputStream inputStream = new FileInputStream(file);BufferedInputStream in = new BufferedInputStream(inputStream);int len = -1;byte[] bt = new byte[1024 * 1024];//每次读取1M,数组大小不能太大,会内存溢出while ((len = in.read(bt)) != -1) {out.write(bt, 0, len);}in.close();inputStream.close();out.flush();System.out.println("文件已完成:" + file.getName());}System.out.println("文件已完成合并====");}       

相关文章:

  • 你适合学Python吗?学了Python可以做什么工作?
  • webpack5基础--05_处理图片资源
  • 灵魂指针,教给(二)
  • hivesql和sparksql排序问题详解
  • 【Godot4自学手册】第二十节增加游戏的打击感,镜头震颤、冻结帧和死亡特效
  • [C语言]——分支和循环(4)
  • 【E3S独立出版】2024年第二届绿色建筑国际会议(ICoGB 2024)
  • 重学SpringBoot3-WebMvcAutoConfiguration类
  • 使用 Docker 部署 MrDoc 在线文档管理系统
  • BUUCTF---[MRCTF2020]你传你呢1
  • 【CSS】(浮动定位)易忘知识点汇总
  • Ant Design Vue 修改Model弹框 样式不生效
  • Fastwhisper + Pyannote 实现 ASR + 说话者识别
  • SQL 的优化手段
  • YOLOv5创新改进:SPPF创新涨点篇 | SPPELAN:SPP创新结合ELAN ,效果优于SPP、SPPF| YOLOv9
  • Android系统模拟器绘制实现概述
  • echarts的各种常用效果展示
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • java2019面试题北京
  • Redis的resp协议
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • swift基础之_对象 实例方法 对象方法。
  • text-decoration与color属性
  • 记一次和乔布斯合作最难忘的经历
  • 浅谈Golang中select的用法
  • 数据科学 第 3 章 11 字符串处理
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • ​VRRP 虚拟路由冗余协议(华为)
  • #Z0458. 树的中心2
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $(selector).each()和$.each()的区别
  • (2)STL算法之元素计数
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (k8s中)docker netty OOM问题记录
  • (Python) SOAP Web Service (HTTP POST)
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (十三)Maven插件解析运行机制
  • (一)SpringBoot3---尚硅谷总结
  • (原)本想说脏话,奈何已放下
  • (转)树状数组
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET DataGridView数据绑定说明
  • .Net Web窗口页属性
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NetCore部署微服务(二)
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @Autowired和@Resource装配
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [C# 基础知识系列]专题十六:Linq介绍
  • [C# 网络编程系列]专题六:UDP编程