热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android大文件切割与合并的实现代码

这篇文章主要介绍了Android大文件切割与合并,实现了很多发文件和视频的切割,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

前言:

由于公司的业务,硬生生的把ios开发的我,掰成了android!关于上传文件的需求处理,做了一个Java的简单封装 DocumentManagement 。其中集成了,检测文件,MD5加密,Base64加密/解码,针对文件Base64加密处理,获取文件后戳,切割文件,合并文件等方法。

亲测可切割与合并有效:视频、mp3、jpg、apk!还有很多没测,讲道理应该是都可以的。合并效果如图:

好了不扯皮了,直接上代码!注:以下代码仅供参考,如有想法请留言告知 DocumentManagement 使用方法如下:

//文件
              File file = new File(strPath);

              documentManagement.log("开始——汪汪汪汪");
              //切割文件
              documentManagement.getSplitFile(file,1*1024*1024 );

              //合并文件
              String merFileName = "gsplay";//自定义合并文件名字
              //创建合并文件路径
              String filePath = Environment.getExternalStorageDirectory().getPath()+"/"+merFileName;

              documentManagement.merge(filePath,file,1*1024*1024);
              documentManagement.log("结束——汪汪汪汪");

Java获取文件后缀

/**
   * 获取文件后缀名 例如:.mp4 /.jpg /.apk
   * @param file 指定文件
   * @return String 文件后缀名
   */
  public static String suffixName (File file){
    String fileName=file.getName();
    String fileTyle=fileName.substring(fileName.lastIndexOf("."),fileName.length());
    return fileTyle;
  }

文件按设定的大小进行切割

/**
   * 文件分割方法
   * @param targetFile 分割的文件
   * @param cutSize 分割文件的大小
   * @return int 文件切割的个数
   */
  public static int getSplitFile(File targetFile ,long cutSize ) {

    //计算切割文件大小
    int count = targetFile.length() % cutSize == 0 ? (int) (targetFile.length() / cutSize) :
        (int) (targetFile.length() / cutSize + 1);

    RandomAccessFile raf = null;
    try {
      //获取目标文件 预分配文件所占的空间 在磁盘中创建一个指定大小的文件  r 是只读
      raf = new RandomAccessFile(targetFile, "r");
      long length = raf.length();//文件的总长度
      long maxSize = length / count;//文件切片后的长度
      long offSet = 0L;//初始化偏移量

      for (int i = 0; i  0) {
        getWrite(targetFile.getAbsolutePath(), count-1, offSet, length);
      }

    } catch (FileNotFoundException e) {
//      System.out.println("没有找到文件");
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try {
        raf.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return count;
  }
  /**
   * 指定文件每一份的边界,写入不同文件中
   * @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;

    String a=file.split(suffixName(new File(file)))[0];

    try {
      //申明文件切割后的文件磁盘
      RandomAccessFile in = new RandomAccessFile(new File(file), "r");
      //定义一个可读,可写的文件并且后缀名为.tmp的二进制文件
      //读取切片文件
      File mFile = new File(a + "_" + index + ".tmp");
      //如果存在
      if (!isFileExist(mFile)) {
        RandomAccessFile out = new RandomAccessFile(mFile, "rw");
        //申明具体每一文件的字节数组
        byte[] b = new byte[1024];
        int n = 0;
        //从指定位置读取文件字节流
        in.seek(begin);
        //判断文件流读取的边界
        while ((n = in.read(b)) != -1 && in.getFilePointer() <= end) {
          //从指定每一份文件的范围,写入不同的文件
          out.write(b, 0, n);
        }

        //定义当前读取文件的指针
        endPointer = in.getFilePointer();
        //关闭输入流
        in.close();
        //关闭输出流
        out.close();
      }else {
        //不存在

      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return endPointer - 1024;
  }

文件合并

/**
   * 文件合并
   * @param fileName 指定合并文件
   * @param targetFile 分割前的文件
   * @param cutSize 分割文件的大小
   */
  public static void merge(String fileName,File targetFile ,long cutSize) {


    int tempCount = targetFile.length() % cutSize == 0 &#63; (int) (targetFile.length() / cutSize) :
        (int) (targetFile.length() / cutSize + 1);
    //文件名
    String a=targetFile.getAbsolutePath().split(suffixName(targetFile))[0];

    RandomAccessFile raf = null;
    try {
      //申明随机读取文件RandomAccessFile
      raf = new RandomAccessFile(new File(fileName+suffixName(targetFile)), "rw");
      //开始合并文件,对应切片的二进制文件
      for (int i = 0; i 

DocumentManagement_Dome_Git下载地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • Android 6.0 切换指定 Wi-Fi 的解决方案
    本文详细介绍了在 Android 6.0 系统中切换到指定 Wi-Fi 的方法,包括常见的问题、原因分析及解决方案。通过官方文档和代码示例,帮助开发者更好地理解和实现这一功能。 ... [详细]
  • 如何清除Chrome浏览器地址栏的特定历史记录
    在使用Chrome浏览器时,你可能会发现地址栏保存了大量浏览记录。有时你可能希望删除某些特定的历史记录而不影响其他数据。本文将详细介绍如何单独删除地址栏中的特定记录以及批量清除所有历史记录的方法。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • Nature Microbiology: 人类肠道古菌基因组目录
    本研究揭示了人类肠道微生物群落中古细菌的多样性,分析了来自24个国家、农村和城市人群的1,167个非冗余古细菌基因组。研究鉴定了多个新分类群,并探讨了古菌对宿主的适应性及其与社会人口特征的关系。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 本文探讨了在构建应用程序时,如何对不同类型的数据进行结构化设计。主要分为三类:全局配置、用户个人设置和用户关系链。每种类型的数据都有其独特的用途和应用场景,合理规划这些数据结构有助于提升用户体验和系统的可维护性。 ... [详细]
  • 本文将详细介绍多个流行的 Android 视频处理开源框架,包括 ijkplayer、FFmpeg、Vitamio、ExoPlayer 等。每个框架都有其独特的优势和应用场景,帮助开发者更高效地进行视频处理和播放。 ... [详细]
  • 气象对比分析
    本文探讨了不同地区和时间段的天气模式,通过详细的图表和数据分析,揭示了气候变化的趋势及其对环境和社会的影响。 ... [详细]
  • 通常情况下,修改my.cnf配置文件后需要重启MySQL服务才能使新参数生效。然而,通过特定命令可以在不重启服务的情况下实现配置的即时更新。本文将详细介绍如何在线调整MySQL配置,并验证其有效性。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 本文将探讨2015年RCTF竞赛中的一道PWN题目——shaxian,重点分析其利用Fastbin和堆溢出的技巧。通过详细解析代码流程和漏洞利用过程,帮助读者理解此类题目的破解方法。 ... [详细]
author-avatar
徐新nina
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有