Java如何将大文件切割成小文件
作者:PowerAlan 时间:2022-12-27 07:40:40
运用Java编写代码将一个大文件切割成指定大小的小文件
思路:
对已知文件进行切割操作 –> 得到多个碎片文件
使用:
1、 1个字节输入流 –> 读取已知文件中的数据
2、 多个字节输出流 –> 生成多个碎片文件
思路补充:
创建一个指定大小的byte数组,将大文件读取到byte数组中,读满一次将byte数组写入一个新的小文件中,如此循环直到将大文件读取完毕
注意:此时最后一个小文件可能不足规定的内存大小,在从大文件读取最后一个byte数组时,可能还没读满byte数组,大文件就读取完毕了,所以只能将最后的未满足规定内存大小byte数组写入最后一个文件中;
具体代码如下:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CutDemo {
public static void main(String[] args) {
//调用cutFile()函数 传人参数分别为 (原大文件,切割后存放的小文件的路径,切割规定的内存大小)
cutFile("D:\\java\\cut\\ForrestGump.avi", "D:\\java\\cuts",1024 * 1024 * 20);
}
private static void cutFile(String src, String endsrc, int num) {
FileInputStream fis = null;
File file = null;
try {
fis = new FileInputStream(src);
file = new File(src);
//创建规定大小的byte数组
byte[] b = new byte[num];
int len = 0;
//name为以后的小文件命名做准备
int name = 1;
//遍历将大文件读入byte数组中,当byte数组读满后写入对应的小文件中
while ((len = fis.read(b)) != -1) {
//分别找到原大文件的文件名和文件类型,为下面的小文件命名做准备
String name2 = file.getName();
int lastIndexOf = name2.lastIndexOf(".");
String substring = name2.substring(0, lastIndexOf);
String substring2 = name2.substring(lastIndexOf, name2.length());
FileOutputStream fos = new FileOutputStream(endsrc + "\\\\"+ substring + "-" + name + substring2);
//将byte数组写入对应的小文件中
fos.write(b, 0, len);
//结束资源
fos.close();
name++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
//结束资源
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
对应路径截图
原大文件路径截图:
切割后的小文件执行代码前路径截图:
切割后的小文件执行代码后路径截图:
来源:https://blog.csdn.net/PowerAlan/article/details/78948383
标签:java,文件切割
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
简单讲解Android开发中触摸和点击事件的相关编程方法
2023-03-30 12:29:10
C#面向对象设计的七大原则
2021-10-21 04:15:49
![](https://img.aspxhome.com/file/2023/1/79081_0s.jpg)
SpringBoot多线程进行异步请求的处理方式
2021-11-10 10:48:30
搞懂Java线程池
2021-08-04 10:01:06
![](https://img.aspxhome.com/file/2023/5/62345_0s.jpg)
c#防止多次运行代码收集分享
2021-09-27 18:28:26
基于JDK动态代理原理解析
2022-07-24 19:43:33
SpringBoot整合Security安全框架实现控制权限
2022-10-03 14:37:15
![](https://img.aspxhome.com/file/2023/3/65583_0s.png)
十种JAVA排序算法实例
2022-11-11 00:19:54
详解Java中自定义注解的使用
2023-11-27 07:36:30
![](https://img.aspxhome.com/file/2023/2/60032_0s.png)
用代码更新你的jar包
2023-09-19 23:01:04
Java数据结构及算法实例:冒泡排序 Bubble Sort
2022-10-17 08:39:45
SpringBoot结合Redis配置工具类实现动态切换库
2022-04-15 14:14:13
Springboot项目中使用redis的配置详解
2021-11-26 03:43:44
![](https://img.aspxhome.com/file/2023/7/70367_0s.png)
Java之ThreadLocal使用常见和方式案例讲解
2023-08-28 13:54:09
![](https://img.aspxhome.com/file/2023/7/108227_0s.jpg)
spring boot + mybatis实现动态切换数据源实例代码
2021-11-14 03:37:59
详解Springboot自定义异常处理
2021-11-04 17:15:12
C#中属性和成员变量的区别说明
2022-02-17 22:36:57
利用java操作Excel文件的方法
2021-12-13 03:03:49
Java创建线程的两种方式
2023-09-12 05:20:55
Java设计模式之工厂模式实现方法详解
2023-11-26 07:55:51