Android复制assets中的文件到SD卡

一、背景

c++想读取Android中的文件可以将assets中的文件拷贝到sd卡中,然后c++就可以直接操作sd卡中的文件了。

二、代码实现
/**
 * 是否有拷贝出错的文件
 */
 var hasCopyFailedFile = false
/**
 * 拷贝assets目录中的文件到sd卡
 * @param context 上下文
 * @param assetsPath assets 文件夹中的目录
 * @param dstPath sd卡磁盘目录
 */
fun copyAssetsToSD(context: Context, assetsPath: String, dstPath: String): Boolean {
    hasCopyFailedFile = false
    copyAssetsToDst(context, assetsPath, dstPath)
    return !hasCopyFailedFile
}

/**
 * 递归拷贝Assets文件文件到SD卡
 * @param context 上下文
 * @param assetsPath assets 文件夹中的目录
 * @param dstPath sd卡磁盘目录
 */
private fun copyAssetsToDst(context: Context, assetsPath: String, dstPath: String) {
    try {
        val assetsFileNames = context.assets.list(assetsPath)
        val dstFile = File(dstPath)
        if (assetsFileNames != null && assetsFileNames.isNotEmpty()) {
            if (!dstFile.exists()) {
                dstFile.mkdirs()
            }
            for (assetsFileName in assetsFileNames) {
                if (assetsPath != "") {
                    // assets 文件夹下的目录
                    copyAssetsToDst(context, assetsPath + File.separator + assetsFileName, dstPath + File.separator + assetsFileName)
                } else {
                    // assets 文件夹
                    copyAssetsToDst(context, assetsFileName, dstPath + File.separator + assetsFileName)
                }
            }
        } else {
            if (!dstFile.exists()) {
                //当文件不存在的时候copy
                val inputStream = context.assets.open(assetsPath)
                val fileOutputStream = FileOutputStream(dstFile)
                val buffer = ByteArray(1024)
                var byteCount: Int
                while (inputStream.read(buffer).also { byteCount = it } != -1) {
                    fileOutputStream.write(buffer, 0, byteCount)
                }
                fileOutputStream.flush()
                inputStream.close()
                fileOutputStream.close()
            } else {
                L.i("copyAssetsToDst", "文件已经存在:${dstFile.path}")
            }
        }
    } catch (e: Exception) {
        e.printStackTrace()
        hasCopyFailedFile = true
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网小熊猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值