java实现文件切片和合并的代码示例

这篇文章主要介绍了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等文件的拆分与合并,下面是图片切片和拆分的效果图

 

java ffmpeg切片 java文件切片_读取文件