java实现文件切片和合并的代码示例
时间:2021-07-02 08:56:06|栏目:JAVA代码|点击: 次
最近在学习大数据相关的知识点,其中需要实现文件的切片和合并,完整的java实现代码,以下贴出个人代码,仅供参考
首先建一个SplitUtil工具类,在工具类中有三个方法getSplitFile,getWrite,merge
1,文件拆分代码
public static void getSplitFile(String file,int count){
//预分配文件所占用的磁盘空间,在磁盘创建一个指定大小的文件,“r”表示只读,“rw”支持随机读写
try {
RandomAccessFile raf = new RandomAccessFile(new File(file), "r");
//计算文件大小
long length = raf.length();
System.out.println(length);
//计算文件切片后每一份文件的大小
long maxSize = length / count;
System.out.println(maxSize);
long offset = 0L;//定义初始文件的偏移量(读取进度)
//开始切割文件
for(int i = 0; i < count - 1; i++){ //count-1最后一份文件不处理
//标记初始化
long fbegin = offset;
//分割第几份文件
long fend = (i+1) * maxSize;
//写入文件
offset = getWrite(file, i, fbegin, fend);
}
//剩余部分文件写入到最后一份(如果不能平平均分配的时候)
if (length - offset > 0) {
//写入文件
getWrite(file, count-1, offset, length);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2,getWrite文件写入代码
/**
* 指定文件每一份的边界,写入不同文件中
* @param file 源文件
* @param index 源文件的顺序标识
* @param begin开始指针的位置
* @param end 结束指针的位置
* @return long
*/
public static long getWrite(String file,int index,long begin,long end){
long endPointer = 0L;
try {
//申明文件切割后的文件磁盘
RandomAccessFile in = new RandomAccessFile(new File(file), "r");
//定义一个可读,可写的文件并且后缀名为.tmp的二进制文件
RandomAccessFile out = new RandomAccessFile(new File(file + "_" + index + ".tmp"), "rw");
//申明具体每一文件的字节数组
byte[] b = new byte[1024];
int n = 0;
//从指定位置读取文件字节流
in.seek(begin);
//判断文件流读取的边界
while(in.getFilePointer() <= end && (n = in.read(b)) != -1){
//从指定每一份文件的范围,写入不同的文件
out.write(b, 0, n);
}
//定义当前读取文件的指针
endPointer = in.getFilePointer();
//关闭输入流
in.close();
//关闭输出流
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return endPointer;
}
3.文件合并代码
/**
* 文件合并
* @param file 指定合并文件
* @param tempFile 分割前的文件名
* @param tempCount 文件个数
*/
public static void merge(String file,String tempFile,int tempCount){
RandomAccessFile raf = null;
try {
//申明随机读取文件RandomAccessFile
raf = new RandomAccessFile(new File(file), "rw");
//开始合并文件,对应切片的二进制文件
for (int i = 0; i < tempCount; i++) {
//读取切片文件
RandomAccessFile reader = new RandomAccessFile(new File(tempFile + "_" + i + ".tmp"), "r");
byte[] b = new byte[1024];
int n = 0;
while((n = reader.read(b)) != -1){
raf.write(b, 0, n);//一边读,一边写
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
最后在主程序里面调用就可以了
public static void main(String[] args) {
String file = "F:\\java-study\\img\\mv.jpg";
int count = 5;
//1.根据现有的文件编写文件编写文件切片工具类
//2.写入到二进制临时文件
// getSplitFile(file, count);
//3.根据实际的需求合并指定数量的文件
String tempFile = "F:\\java-study\\img\\img.jpg";
merge(file, tempFile, 5);
}
以上代码可实现图片,文档,mp3,mp4等文件的拆分与合并,下面是图片切片和拆分的效果图

上一篇:springboot schedule 解决定时任务不执行的问题
栏 目:JAVA代码
下一篇:Java中List遍历删除元素remove()的方法
本文标题:java实现文件切片和合并的代码示例
本文地址:http://www.codeinn.net/misctech/151222.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




