Android递归拷贝assets资源到指定目录

本文介绍如何在Android中使用编程方式实现从assets目录递归复制资源到指定目录,解决assets接口限制带来的操作不便问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来递归拷贝文件夹是很容易的, 但是Android的assets提供的接口没有文件操作那么方便, 昨天写了一个方法来实现把assets资源拷贝到指定目录,

/**
     * copy assets to releaseDir with full path
     * 
     * @author brian
     * @param context
     * @param assetsDir
     * @param releaseDir
     */
    public static void releaseAssets(Context context, String assetsDir,
            String releaseDir) {

        if (TextUtils.isEmpty(releaseDir)) {
            return;
        } else if (releaseDir.endsWith("/")) {
            releaseDir = releaseDir.substring(0, releaseDir.length() - 1);
        }

        if (TextUtils.isEmpty(assetsDir) || assetsDir.equals("/")) {
            assetsDir = "";
        } else if (assetsDir.endsWith("/")) {
            assetsDir = assetsDir.substring(0, assetsDir.length() - 1);
        }

        AssetManager assets = context.getAssets();
        try {
            String[] fileNames = assets.list(assetsDir);//只能获取到文件(夹)名,所以还得判断是文件夹还是文件
            if (fileNames.length > 0) {// is dir
                for (String name : fileNames) {
                    if (!TextUtils.isEmpty(assetsDir)) {
                        name = assetsDir + "/" + name;//补全assets资源路径
                    }
//                    Log.i("", "brian name=" + name);
                    String[] childNames = assets.list(name);//判断是文件还是文件夹
                    if (!TextUtils.isEmpty(name) && childNames.length > 0) {
                        releaseAssets(context, name, releaseDir);//递归, 因为资源都是带着全路径, 
                                                                                           //所以不需要在递归是设置目标文件夹的路径
                    } else {
                        InputStream is = assets.open(name);
                        FileUtil.writeFile(releaseDir + "/" + name, is);
                    }
                }
            } else {// is file
                InputStream is = assets.open(assetsDir);
                // 写入文件前, 需要提前级联创建好路径, 下面有代码贴出
                FileUtil.writeFile(releaseDir + "/" + assetsDir, is);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
级联创建folder
    public static void checkFolderExists(String path) {
        File file = new File(path);
        if (file.exists() && !file.isDirectory() || !file.exists()) {
            file.mkdirs();
        }
    }
自己写的优快云博客客户端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值