EasyClick 大文件分割合并

EasyClick 大文件分割合并

适用于网络不好的情况下载大文件容易失败,将大文件分割后上传服务器,分批次小量多次下载,然后合并为原文件

分割代码

js 复制代码
// 分割
splitFile(源文件, 输出目录, 分片大小);

合并代码

js 复制代码
mergeFiles(输出目录, 合并输出);

完整源码

JavaScript 复制代码
const 源文件 = "/sdcard/xxxxxx.zip";
const 输出目录 = "/sdcard/fsplit/";
const 合并输出 = "/sdcard/xxxxxx2.zip";
const 分片大小 = 1024 * 1024; // 1MB


// 分割
splitFile(源文件, 输出目录, 分片大小);

// 合并
mergeFiles(输出目录, 合并输出);

/**
 * 分割文件
 * @param src
 * @param dir
 * @param chunkSize
 */
function splitFile(src, dir, chunkSize) {
    try {
        let fis = new java.io.FileInputStream(src);
        let buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 8192);
        let index = 1;
        let fos = null;
        new java.io.File(dir).mkdirs();

        while (true) {
            let len = fis.read(buffer);
            if (len === -1) break;

            if (!fos) {
                let num = index + "";
                while (num.length < 3) num = "0" + num;
                let name = dir + new java.io.File(src).getName() + "." + num;
                fos = new java.io.FileOutputStream(name);
            }

            fos.write(buffer, 0, len);
            if (fos.getChannel().size() >= chunkSize) {
                fos.close();
                fos = null;
                index++;
            }
        }
        if (fos) fos.close();
        fis.close();
        toast("分割完成");
    } catch (e) {
        toast("分割错误:" + e);
    }
}

/**
 * 合并文件
 * @param dir
 * @param outPath
 */
function mergeFiles(dir, outPath) {
    try {
        let folder = new java.io.File(dir);
        let files = folder.listFiles();
        if (!files || files.length === 0) {
            toast("无分片");
            return;
        }

        // 正确排序:按文件名排序(001 → 002 → 003)
        java.util.Arrays.sort(files);

        let out = new java.io.FileOutputStream(outPath);
        let buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 8192);

        // 合并所有分片,不做错误过滤!
        for (let i = 0; i < files.length; i++) {
            let f = files[i];
            let name = f.getName();

            // 只合并 .001 .002 .003 ... 格式
            if (name.matches(".+\\.\\d{3}$")) {
                let inStream = new java.io.FileInputStream(f);
                while (true) {
                    let len = inStream.read(buffer);
                    if (len === -1) break;
                    out.write(buffer, 0, len);
                }
                inStream.close();
            }
        }

        out.close();
        toast("合并完成!文件完整!");
    } catch (e) {
        toast("合并错误:" + e);
    }
}
相关推荐
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉5 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
dayuOK63075 天前
写作卡壳怎么办?我的“5分钟启动法”
人工智能·职场和发展·自动化·新媒体运营·媒体
志栋智能6 天前
超自动化巡检:如何选择适合你的起点?
运维·自动化
HackTwoHub6 天前
Sqli-Scanner SQL注入SKILL自动化挖掘SQL注入,零依赖自动化SQL注入挖掘,赏金猎人
数据库·人工智能·sql·web安全·网络安全·自动化·系统安全
csdndeyeye6 天前
拆解AI投简历插件:塔塔网申的技术逻辑和实测数据
人工智能·自动化·秋招·ai投简历插件·ai找工作·求职助手·应届生就业
小白学大数据6 天前
Python + 大模型行业资讯自动化摘要流水线完整工程实现方案
开发语言·python·自动化
Super Scraper6 天前
如何批量抓取 TikTok 数据而不被封锁?完整指南
爬虫·ai·自动化·抖音·tiktok·ai agent
曦尧6 天前
GitHub - jwasham/coding-interview-university: 一份完整的计算机科学学习计划,助你成为软件工程师。· GitHub
ai·自动化
天空属于哈夫克36 天前
打造私域闭环:CRM 如何驱动企微外部客户触达
自动化·企业微信·api