网络上传文件的时候,当一个文件很大时,就需要将文件分割成几个文件,以便于网络传输。用java来实现这个功能,思路如下:利用io流读取文件,然后再将文件字节分成对应的字节,再写入文件。为了加快读取文件效率,每读取每一块数据,创建一个线程;如果文件有100M,每次分割1M,那么按照如上的代码就会创建100个线程,可以加入线程池解决无论多少个线程,每次只执行指定个数的线程数
代码实现如下:

package com.hzl.java.File;import java.io.File;
import java.io.FileOutputStream;
import java.io.RandomAccessFile;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class Main4 {public static void main(String[] args) {// 创建分割文件的存储文件夹String basefile = "d:data/";new File(basefile).mkdir();// 要分割的文件String filename = "d:readme.txt";// 文件的后缀String suf = filename.substring(filename.lastIndexOf("."));// 读取文件的长度long length = (new File(filename)).length();// 为了代码的通用性,可以指定每个文件分割的大小,从而确定分割成几个文件// 设置分割文件的大小int sonfile = 10;// 分割文件的数量int times = (int) Math.ceil(length / (float) sonfile);// 创建线程池,根据分割文件的数量创建线程ExecutorService threadPool = Executors.newFixedThreadPool(times);for (int i = 0; i < times; i++) {final int j = i;// 设置随机的文件名String newfilename = UUID.randomUUID().toString();threadPool.execute(() -> {try (// 使用randomAccessFile来读取文件RandomAccessFile randomAccessFile = new RandomAccessFile(filename, "rw");// 使用FileOutputStream写入文件FileOutputStream fileOutputStream = new FileOutputStream(basefile + newfilename + suf);) {int pos = sonfile * j;randomAccessFile.seek(pos);byte[] buf = new byte[sonfile];int size = randomAccessFile.read(buf);fileOutputStream.write(buf, 0, size);} catch (Exception e) {e.printStackTrace();}});}System.out.println("文件分割完成");threadPool.shutdown();}}

运行结果如下:

Java io流实现文件分割相关推荐

  1. Java io流---拷贝文件夹下的所有文件和目录

    Java io流-拷贝文件夹下的所有文件和目录 代码: package demo01;import java.io.*; import java.util.TreeMap;public class C ...

  2. java io流复制文件简单实例

    java io流复制文件简单实例 实例1: package com.io;import java.io.BufferedInputStream; import java.io.BufferedOutp ...

  3. JAVA~~IO流和文件

    ​​​​​​​​ Io流的分类 有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物, 往内存中去,叫做输入(Input).或者叫做读(Read). 从内存中出来,叫做输出(Outpu ...

  4. java IO流之文件切割两例(含Properties 用法)

    package cn.itcast.io.p1.splitfile; import java.io.File; import java.io.FileInputStream; import java. ...

  5. java io流读写文件换行_java基础io流——OutputStream和InputStream的故事(温故知新)...

    io流概述: IO流用来处理设备之间的数据传输,上传文件和下载文件,Java对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中. IO流分类 按照数据流向 输入流 读入数据 输出流 写出 ...

  6. JAVA中用流进行文件分割

    package com.google.javase.io; /*** 文件分割*/ import java.io.BufferedInputStream; import java.io.Buffere ...

  7. java - io流拷贝文件

    app异常,崩溃捕捉 崩溃捕捉 app隐式启动 1. 最优的解决方案: 接下来我要说的这种方法可以隐藏图标,同是也可以正常启动运行. 在manifest的入口activity里面intent-filt ...

  8. java IO流——获取文件的大小 根据文件的大小 判断是GB 还是MB 还是KB 还是b

    封装一个方法 获取文件的大小 根据文件的大小 判断是GB 还是MB 还是KB 还是b 1GB=1024MB 1MB=1024KB 1KB=1024B package com.oracle.test;i ...

  9. Java IO流之文件流

    一.文件流分类 二.FileInputStream 三.FileOutputStream 四.FileReader 五.FileWriter 六.文件流应用 1,复制或剪切文件 2,读取文件信息 应用 ...

最新文章

  1. tf之get_Variable()
  2. FIFO分枝_限界算法
  3. 【HTML+CSS网页设计与布局 从入门到精通】第15章-表格格式:边距/居中/边框/折叠
  4. 找到MySQL服务器发生SWAP罪魁祸首
  5. Error:java: Compilation failed: internal java compiler error or source 1.5 提升版本
  6. 原创engine中地块的自动编号函数
  7. Win7系统开机动画设置
  8. 入行GIS圈N年,看看资深GISer如何进行场景绘制?
  9. 如何通过a链接实现图片下载
  10. python爬取酷狗音乐歌词_Python爬虫:爬取酷狗音乐
  11. DaZeng:雪碧图(精灵图)的使用
  12. [RK3566] 通过GM8775 点LVDS屏调试记录
  13. 抖音作品实时监控采集数据,抖音达人下关键词数据抓取
  14. 理解HTC Vive更新——控制相机旋转和位移
  15. composer 初级使用
  16. 【USACO】山峰暸望
  17. PowerBuilder打印QRCode
  18. 关于人机智能的一点思考
  19. Latex Tips: 如何输入矩阵(illustrated in Jupyter Notebook)
  20. leetcode 1103分糖果II

热门文章

  1. RDP 批处理,密码需要先加密
  2. SAP采购订单交期确认 Order Acknowledgement of PO
  3. 微软发布 Azure IoT物联网「数字孪生」智能解决方案
  4. Python识别验证码----网易易盾推理拼图
  5. 停止git上传_git – rebase正在进行中 不能提交如何进行或停止(中止)?
  6. JavaScript第二章——变量及数据类型 2021-09-26
  7. 第二类修正贝塞尔函数
  8. patch kernel
  9. 用户消费数据分析,基于python
  10. Android生成简单的图片验证码