网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

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

java中怎么实现文件切片和合并,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

创新互联建站-专业网站定制、快速模板网站建设、高性价比怀安网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式怀安网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖怀安地区。费用合理售后完善,10年实体公司更值得信赖。

首先建一个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中怎么实现文件切片和合并问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。


当前文章:java中怎么实现文件切片和合并
网站URL:http://bjjierui.cn/article/jphdog.html

其他资讯