最近在学习大数据相关的知识点,其中需要实现文件的切片和合并,完整的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等文件的拆分与合并,下面是图片切片和拆分的效果图
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Java实现文件切割拼接的实现代码,包括了Java实现文件切割拼接的实现代码的使用技巧和注意事项,需要的朋友参考一下 单线程实现 文件分割 在老的FAT32文件系统中,最大的单个文件大小必须保存在4G内,对于经常看电影的我这个是不能允许的。不过现在Windows有NTFS文件系统,Linux大部分发行版为Ext4文件系统,最大单个文件大小能大于4G。不过这二者并不能兼容。。格式化NT
本文向大家介绍java实现文件上传下载和图片压缩代码示例,包括了java实现文件上传下载和图片压缩代码示例的使用技巧和注意事项,需要的朋友参考一下 分享一个在项目中用的到文件上传下载和对图片的压缩,直接从项目中扒出来的:) 以上就是本文分享的所有内容了,希望对大家能有所帮助。
本文向大家介绍Java实现文件分割和文件合并实例,包括了Java实现文件分割和文件合并实例的使用技巧和注意事项,需要的朋友参考一下 文件切割和文件合并这个问题困扰了我有一段时间了(超过一天没做粗来)。 找了好多博客,本来想转载一个来的 结果找不到了。很无奈。 只好自己贴代码上了。 当然我会尽力好好写注释的。 文件切割器: 文件合并器: 文件合并器就不写注释了,因为这是一个逆过程。(懒癌附体) 以上
本文向大家介绍Java Socket实现文件传输示例代码,包括了Java Socket实现文件传输示例代码的使用技巧和注意事项,需要的朋友参考一下 最近学Socket学上瘾了,就写了一个简单的文件传输程序。 客户端设计思路:客户端与服务端建立连接,选择客户端本地文件,先将文件名及大小等属性发送给服务端,再将文件通过流的方式传输给服务端。传输的进度打印到控制台中,直到传输完成。 服务端设计思路:服务
本文向大家介绍Vue.Js及Java实现文件分片上传代码实例,包括了Vue.Js及Java实现文件分片上传代码实例的使用技巧和注意事项,需要的朋友参考一下 说明 代码从项目中剥离修改,未经测试,仅提供思路。 前端 文件分片上传的前端关键代码只有一句: //切割文件 var chunk = file.slice(start, end); 通过slice方法来切割文件,然后文件上传的流程视业务和具体技
本文向大家介绍Java Selenium实现多窗口切换的示例代码,包括了Java Selenium实现多窗口切换的示例代码的使用技巧和注意事项,需要的朋友参考一下 在web应用中,常常会遇见点击某个链接会弹出一个新的窗口,或者是相互关联的web应用 ,这样要去操作新窗口中的元素,就需要主机切换到新窗口进行操作。WebDriver 提供了switchTo().window()方法可以实现在不同的窗口