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

Android:如何将临时文件保存到指定磁盘路径?

你有两种实现方案,可根据业务场景选择:

方案1:直接写入目标路径(更推荐,无需临时文件中转)

你可以跳过创建临时文件的步骤,直接将CSV内容写入期望的目标路径,代码如下:

// 优先通过系统API获取应用专属文件目录,不要硬编码路径,适配不同设备
File targetDir = activity.getExternalFilesDir(null);
File targetFile = new File(targetDir, "myfile.csv");

// 直接向目标文件写入CSV内容
FileWriter fw = new FileWriter(targetFile); 
CSVWriter writer = new CSVWriter(fw, ' '/* DEFAULT_SEPARATOR */, NO_QUOTE_CHARACTER, DEFAULT_ESCAPE_CHARACTER, DEFAULT_LINE_END);
writer.writeNext(entries);
writer.flush();
fw.getFD().sync(); // 确保数据完全落盘
writer.close();

说明:Android 10及以上系统对外部存储权限管控严格,activity.getExternalFilesDir()指向应用专属目录,不需要申请额外存储权限即可读写,兼容性远优于硬编码路径。如果必须使用你指定的硬编码路径,直接创建File targetFile = new File("/storage/emulated/0/Android/data/com.example.myproject/files/myfile.csv")即可。

方案2:将已有临时文件移动到目标路径

如果必须保留先写临时文件的逻辑,写完后直接移动文件即可,不需要重新写入流:

// 构造目标文件对象
File targetDir = activity.getExternalFilesDir(null);
File targetFile = new File(targetDir, "myfile.csv");

// 执行移动逻辑
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // 高版本系统用系统API移动,可靠性更高
    Files.move(myfile.toPath(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
} else {
    boolean moveSuccess = myfile.renameTo(targetFile);
    // 同分区下renameTo成功率高,跨分区失败时走文件复制逻辑
    if (!moveSuccess) {
        FileInputStream fis = new FileInputStream(myfile);
        FileOutputStream fos = new FileOutputStream(targetFile);
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) > 0) {
            fos.write(buffer, 0, len);
        }
        fos.flush();
        fos.getFD().sync();
        fis.close();
        fos.close();
        // 复制完成后可删除临时文件释放空间
        myfile.delete();
    }
}

你之前写的FileOutputStream fileOutput = new FileOutputStream(myfile)逻辑是打开已有的临时文件写入内容,无法修改文件本身的存储路径,修改存储路径的本质是把文件内容写入新路径的文件对象,或者直接移动原文件到新路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:18:04