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);
    }
}
相关推荐
arvin_xiaoting3 小时前
OpenClaw学习总结_II_频道系统_4:Slack集成详解
前端·学习·自动化·llm·ai agent·飞书机器人·openclaw
jkyy20143 小时前
家庭智能饮食健康:智能冰箱联动健康数据,实现个性化饮食指导
人工智能·语言模型·自动化·健康医疗
北京耐用通信3 小时前
工业现场通信互通 耐达讯自动化CC-Link IE转Modbus RTU网关
人工智能·物联网·网络协议·自动化·信息与通信
wechatbot8883 小时前
【企业微信】基于HTTP协议的API接口设计:实现账号登录回调的自动化管理
java·http·自动化·企业微信·ipad
GAOJ_K3 小时前
旋转花键在高端制造中的差异化应用
运维·人工智能·科技·机器人·自动化·制造
t_guest4 小时前
自动化脚本-pdf转word
自动化·pdf转word
福昕办公4 小时前
告别手动测性能!AI 自动化性能测试方案落地演示
测试工具·ai·自动化
李少兄4 小时前
企业级数据库自动化备份
运维·数据库·mysql·自动化
勘察加熊人16 小时前
ai飞卢小说自动化处理工作流获得提问素材
运维·自动化