从assets目录复制文件夹和文件,(不只是文件,附demo)

7 篇文章 0 订阅
3 篇文章 0 订阅

最近要将时钟的一些资源做成文件夹放到apk中,然后用户安装的时候复制到SD卡,由于时间比较紧急,就没有做压缩和解压缩的处理,但是问题来了,文件夹最好的放置位置是assest目录,但是通常我们使用的方法都是open(文件名);来获得流,也就是必须知道整个文件的路径,但是我想的是将整个文件夹复制,android并没有提供这样的方法,纠结了好久,终于发现了一个方法list(目录名)。list里的参数是assets目录下的一个目录名,list(目录名)这会得到该目录下的文件和子文件夹,但是我却得不到文件夹的路径,所以只好遍历其子文件夹再用open(文件名);来一个一个文件复制。

/**
     * 从assets目录下拷贝整个文件夹,不管是文件夹还是文件都能拷贝
     * 
     * @param context
     *            上下文
     * @param rootDirFullPath
     *            文件目录,要拷贝的目录如assets目录下有一个SBClock文件夹:SBClock
     * @param targetDirFullPath
     *            目标文件夹位置如:/sdcrad/SBClock
     */
    public static void copyFolderFromAssets(Context context, String rootDirFullPath, String targetDirFullPath) {
        Log.d(TAG, "copyFolderFromAssets " + "rootDirFullPath-" + rootDirFullPath + " targetDirFullPath-" + targetDirFullPath);
        try {
            String[] listFiles = context.getAssets().list(rootDirFullPath);// 遍历该目录下的文件和文件夹
            for (String string : listFiles) {// 看起子目录是文件还是文件夹,这里只好用.做区分了
                Log.d(TAG, "name-" + rootDirFullPath + "/" + string);
                if (isFileByName(string)) {// 文件
                    copyFileFromAssets(context, rootDirFullPath + "/" + string, targetDirFullPath + "/" + string);
                } else {// 文件夹
                    String childRootDirFullPath = rootDirFullPath + "/" + string;
                    String childTargetDirFullPath = targetDirFullPath + "/" + string;
                    new File(childTargetDirFullPath).mkdirs();
                    copyFolderFromAssets(context, childRootDirFullPath, childTargetDirFullPath);
                }
            }
        } catch (IOException e) {
            Log.d(TAG, "copyFolderFromAssets " + "IOException-" + e.getMessage());
            Log.d(TAG, "copyFolderFromAssets " + "IOException-" + e.getLocalizedMessage());
            e.printStackTrace();
        }
    }

 

private static boolean isFileByName(String string) {
        if (string.contains(".")) {
            return true;
        }
        return false;
    }

 

/**
     * 从assets目录下拷贝文件
     * 
     * @param context
     *            上下文
     * @param assetsFilePath
     *            文件的路径名如:SBClock/0001cuteowl/cuteowl_dot.png
     * @param targetFileFullPath
     *            目标文件路径如:/sdcard/SBClock/0001cuteowl/cuteowl_dot.png
     */
    public static void copyFileFromAssets(Context context, String assetsFilePath, String targetFileFullPath) {
        Log.d(TAG, "copyFileFromAssets ");
        InputStream assestsFileImputStream;
        try {
            assestsFileImputStream = context.getAssets().open(assetsFilePath);
            FileHelper.copyFile(assestsFileImputStream, targetFileFullPath);
        } catch (IOException e) {
            Log.d(TAG, "copyFileFromAssets " + "IOException-" + e.getMessage());
            e.printStackTrace();
        }
    }

 

复制过程的log:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值