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);
    }
}
相关推荐
霍格沃兹测试学院-小舟畅学4 小时前
从“QA测两遍直接上线”到规范发布:一次私教咨询实录
自动化
资源分享助手6 小时前
AutoJS Pro9.3最新文档详解与入门教程
自动化
King's King6 小时前
自动化立体仓库系统项目施工要点
运维·自动化
精益数智小屋7 小时前
设备维护方案核心功能拆解:一套好的设备维护方案如何解决设备突发故障
大数据·运维·网络·数据库·人工智能·面试·自动化
Agent产品评测局7 小时前
设备运维自动化预警系统,从0到1落地实操方法:2026企业级架构与智能体选型全指南
运维·人工智能·ai·chatgpt·架构·自动化
Fan_-_9 小时前
MySQL / PostgreSQL DDL 审核自动化:从人工 review 到 CI 拦截
mysql·postgresql·自动化
牛奶咖啡1310 小时前
CI/CD——在jenkins中使用pipeline方式自动化构建java项目jpress
ci/cd·自动化·jenkins·pipeline是什么·pipeline有啥用·pipeline适用场景·pipeline使用示例
暗夜猎手-大魔王10 小时前
转载--一文彻底了解浏览器自动化,cdp、playwright、browser-user、midscene、browsermcp
人工智能·自动化
青主创享阁10 小时前
玄晶引擎XgenCore Works 2.9.2深度解析:自动化能力升级,重构私域与同城运营技术架构
重构·架构·自动化
idolao11 小时前
AutoTiny_5.0.0.1_win_x64自动化操作安装步骤详解(附AutoTiny自动化脚本与录制教程)
运维·自动化