1.拷贝assets目录下的文件,到指定目录,一般是将assets目录下文件,先拷贝到对应app的cache目录下,然后再拷贝到指定目录,具体操作如下
private fun getAssetFilePath(fileName: String, file: Boolean = true): String {
val assetManager = assets
try {
val inputStream: InputStream = assetManager.open(fileName)
val cacheDir: File = application.cacheDir
val outputFile = File(cacheDir, fileName)
val outputStream: OutputStream = FileOutputStream(outputFile)
val buffer = ByteArray(1024)
var length: Int
while (inputStream.read(buffer).also { length = it } > 0) {
outputStream.write(buffer, 0, length)
}
outputStream.close()
inputStream.close()
// 在这里使用绝对路径
return outputFile.absolutePath
} catch (e: IOException) {
e.printStackTrace()
}
return ""
}
// 拷贝到externalFiles目录下的子目录
@RequiresApi(Build.VERSION_CODES.O)
private fun saveToFile(srcFilePath: String, parentDir: String, fileName: String) {
val filePath = application.getExternalFilesDir(null)?.path
val externalFile = File("$filePath/$parentDir")
if (!externalFile.exists()) {
externalFile.mkdirs()
}
val sourceFile = File(srcFilePath)
val destinationFile = File("$externalFile/$fileName")
Files.copy(sourceFile.toPath(), destinationFile.toPath(), StandardCopyOption.REPLACE_EXISTING)
println("File copied from $srcFilePath to $destinationFile")
}
/**
* 拷贝至files目录下
*/
fun copyFile(sourceFile: File, destFileName: String) {
val parentDir = application.getExternalFilesDir(null)?.path
val destFile = File("$parentDir/$destFileName")
val inputStream = FileInputStream(sourceFile)
val outputStream = FileOutputStream(destFile)
val buffer = ByteArray(1024)
var length: Int
while (inputStream.read(buffer).also { length = it } > 0) {
outputStream.write(buffer, 0, length)
}
inputStream.close()
outputStream.close()
}