文件读写 Xamarin.Android

易错点

  1. READ_OWNER_DATA废弃无效权限,不能用于文件读写。
  2. 代码使用 SpecialFolder.Personal应用私有内部存储不需要任何存储权限
    只有访问手机公共共享文件夹(Download、图片目录),才需要申请存储权限。

核心API

代码作用
System.Environment.GetFolderPath(SpecialFolder.Personal)App私有文件夹,卸载APP文件自动删除,其他App无法访问
Path.Combine(path,"myfile.txt")安全拼接目录+文件名,自动处理斜杠
StreamWriter(path, true)写文本;第二个参数true=追加写入false=覆盖重写
StreamReader读取文本文件
using(){}自动释放文件流资源,不用手动调用Close()
ReadToEnd()一次性读取文件全部内容

代码

using System;
using System.IO;

private void Btn_Click1(object sender, EventArgs e)
{
    // 获取应用私有存储目录
    string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
    // 拼接完整文件路径
    string filename = Path.Combine(path, "myfile.txt");

    // 写入文件,true代表追加
    using (var streamWriter = new StreamWriter(filename, true))
    {
        streamWriter.WriteLine(DateTime.UtcNow);
    }

    // 读取全部文件内容
    using (var streamReader = new StreamReader(filename))
    {
        string content = streamReader.ReadToEnd();
        Console.WriteLine(content);
    }
}Code language: JavaScript (javascript)

补充

  1. 文件保存位置:/data/data/包名/files/myfile.txt,普通文件管理器看不到,只有Android Studio设备文件浏览器可以查看。
  2. 如果要写到手机外部公共存储,才需要在AndroidManifest添加权限,高版本Android还要动态申请权限。
  3. using离开大括号会自动Dispose关闭流,防止文件被占用。

对比 SharedPreferences 和 文件存储

  • SharedPreferences:适合保存少量键值对(开关、配置),底层本质也是xml小文件。
  • StreamWriter/StreamReader文件读写:适合保存大量文本、日志

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注