温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java中怎么实现文件切片和合并

发布时间:2021-06-25 16:38:17 来源:亿速云 阅读:328 作者:Leah 栏目:编程语言

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); }

关于java中怎么实现文件切片和合并问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI