java中怎么实现文件切片和合并
创始人
2024-12-22 03:01:03
0次

首先建一个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); }

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...