Documents文件夹文件的URI是什么?引用xxx.txt时提示文件未找到怎么办?
正确访问Android外部存储Documents文件夹的方法
首先明确:你用Assets.Open()的方式完全错误,这个方法仅用于读取应用内置assets目录中的资源文件,根本无法访问外部存储的文件。下面是正确的实现步骤:
1. 先处理存储权限
- Android 9及以下:需要申请
READ_EXTERNAL_STORAGE权限;Android 10及以上:可选择申请MANAGE_EXTERNAL_STORAGE权限,或使用存储访问框架(SAF)无需该权限。 - 在Manifest中添加权限声明:
<!-- Android 9及以下 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- Android 10+ 可选,若用SAF则无需此权限 --> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
- 动态申请权限(以
READ_EXTERNAL_STORAGE为例):
if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.ReadExternalStorage) != Permission.Granted) { ActivityCompat.RequestPermissions(this, new string[] { Manifest.Permission.ReadExternalStorage }, 1); }
2. 获取Documents文件夹的正确路径
不要硬编码路径(不同设备路径可能有差异),用系统API获取:
// 获取公共Documents目录的绝对路径 string documentsDir = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDocuments).AbsolutePath; // 拼接目标文件的完整路径 string targetFilePath = Path.Combine(documentsDir, "xxx.txt");
3. 读取文件内容
使用普通的文件流读取,而非Assets.Open():
if (File.Exists(targetFilePath)) { using (StreamReader sr = new StreamReader(targetFilePath)) { string fileContent = sr.ReadToEnd(); // 这里处理读取到的文件内容 } } else { // 文件不存在时的处理逻辑 }
4. Android 10+ 分区存储适配
如果你的应用目标API是29及以上,系统默认启用分区存储,直接访问公共目录可能受限,推荐使用**存储访问框架(SAF)**让用户手动选择文件:
// 启动文件选择器 Intent pickFileIntent = new Intent(Intent.ActionOpenDocument); pickFileIntent.AddCategory(Intent.CategoryOpenable); pickFileIntent.SetType("text/plain"); // 指定只选文本文件 StartActivityForResult(pickFileIntent, 2); // 在回调中处理选中的文件 protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); if (requestCode == 2 && resultCode == Result.Ok) { Android.Net.Uri fileUri = data.Data; // 通过URI打开流读取文件 using (Stream fileStream = ContentResolver.OpenInputStream(fileUri)) using (StreamReader sr = new StreamReader(fileStream)) { string content = sr.ReadToEnd(); // 处理文件内容 } } }
内容的提问来源于stack exchange,提问作者Ron
相关产品推荐
相关产品推荐

