You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android内部存储中录音临时文件的复制与移动方法

Android 实现临时录音文件的复制/移动到指定目标文件

核心前提说明

因为你需要保留audioTempFile供后续录制使用,优先选择复制操作;如果后续不再需要临时文件,才考虑移动操作(移动会删除原临时文件)。另外,你使用的getFilesDir()属于应用私有存储目录,无需申请动态存储权限。


步骤1:确保目标目录存在

在复制/移动前,必须先检查并创建目标存储目录storeDir,否则会出现文件找不到的异常:

// Kotlin 代码
val rootDir = getFilesDir()
val storeDir = File(rootDir, "MyStorageDirectory")
if (!storeDir.exists()) {
    storeDir.mkdirs() // 递归创建多级目录
}
val finalFile = File(storeDir, "MyFinalFileName")
// Java 代码
File rootDir = getFilesDir();
File storeDir = new File(rootDir, "MyStorageDirectory");
if (!storeDir.exists()) {
    storeDir.mkdirs();
}
File finalFile = new File(storeDir, "MyFinalFileName");

步骤2:复制临时文件到目标文件

Kotlin 实现(使用IO流)

import java.io.FileInputStream
import java.io.FileOutputStream

fun copyTempFile(audioTempFile: File, finalFile: File) {
    try {
        FileInputStream(audioTempFile).use { inputStream ->
            FileOutputStream(finalFile).use { outputStream ->
                inputStream.copyTo(outputStream)
            }
        }
        // 复制成功后的逻辑,比如提示用户保存完成
    } catch (e: Exception) {
        e.printStackTrace()
        // 处理复制失败的情况,比如弹窗提示用户
    }
}

// 调用示例
copyTempFile(audioTempFile, finalFile)

Java 实现(使用IO流)

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public void copyTempFile(File audioTempFile, File finalFile) {
    FileInputStream inputStream = null;
    FileOutputStream outputStream = null;
    try {
        inputStream = new FileInputStream(audioTempFile);
        outputStream = new FileOutputStream(finalFile);
        
        byte[] buffer = new byte[1024];
        int length;
        while ((length = inputStream.read(buffer)) > 0) {
            outputStream.write(buffer, 0, length);
        }
        // 复制成功后的逻辑
    } catch (IOException e) {
        e.printStackTrace();
        // 处理失败逻辑
    } finally {
        try {
            if (inputStream != null) inputStream.close();
            if (outputStream != null) outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// 调用示例
copyTempFile(audioTempFile, finalFile);

步骤3:移动临时文件到目标文件(可选,会删除原文件)

如果后续不需要保留临时录音文件,可以用移动操作,比复制更高效:

Kotlin 实现

fun moveTempFile(audioTempFile: File, finalFile: File) {
    try {
        val isSuccess = audioTempFile.renameTo(finalFile)
        if (isSuccess) {
            // 移动成功逻辑,比如清理临时文件相关的缓存
        } else {
            // 移动失败,可能是目录不存在或文件被占用
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }
}

// 调用示例
moveTempFile(audioTempFile, finalFile)

Java 实现

public void moveTempFile(File audioTempFile, File finalFile) {
    try {
        boolean isSuccess = audioTempFile.renameTo(finalFile);
        if (isSuccess) {
            // 移动成功逻辑
        } else {
            // 移动失败处理
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

// 调用示例
moveTempFile(audioTempFile, finalFile);

注意:renameTo()方法在跨存储分区时可能失效(比如从内部存储移动到SD卡),但你这里都是在应用私有目录内操作,所以可以正常使用。如果涉及跨分区移动,建议用复制+删除原文件的方式替代。


内容的提问来源于stack exchange,提问作者Michel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:31:17