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

Android技术问题:如何将content://类型Uri转为File对象

content:// Uri 转 File 对象的正确方法

直接用 new File(uri.getPath()) 或者 new File(uri.toString()) 行不通,因为content:// 类型的 Uri 并非真实的文件系统路径,它是 Android 中 ContentProvider 用来标识数据资源的统一标识符,无法直接映射到本地文件。

正确的做法是通过 ContentResolver 读取 Uri 对应的数据流,将其写入本地临时文件,再获取这个临时文件的 File 对象,具体步骤和代码如下:

import android.content.ContentResolver;
import android.content.Context;
import android.net.Uri;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public File contentUriToFile(Context context, Uri contentUri) throws Exception {
    // 创建临时文件,存储在应用缓存目录,退出时自动删除
    File tempFile = File.createTempFile("temp", null, context.getCacheDir());
    tempFile.deleteOnExit();

    // 读取 Uri 对应的数据流
    InputStream inputStream = context.getContentResolver().openInputStream(contentUri);
    OutputStream outputStream = new FileOutputStream(tempFile);

    // 数据流写入临时文件
    byte[] buffer = new byte[1024];
    int length;
    while ((length = inputStream.read(buffer)) > 0) {
        outputStream.write(buffer, 0, length);
    }

    // 关闭资源
    inputStream.close();
    outputStream.close();

    return tempFile;
}

注意事项:

  • 若 Uri 指向外部存储文件,需提前申请读取外部存储的权限
  • 临时文件默认存在缓存目录,如需持久化可修改存储路径
  • 实际使用时需添加异常捕获逻辑,避免资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:21:32