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

来源:互联网 发布:云计算和大数据面试 编辑:程序博客网 时间:2024/05/22 11:05

本来递归拷贝文件夹是很容易的, 但是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();        }    }
自己写的CSDN博客客户端

0 0
原创粉丝点击