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

如何在Xamarin Android中实现文件的打开、读取与写入?

在Xamarin Android中实现文件选择与保存功能

Xamarin Android中没有Windows平台那样的OpenFileDialog控件,但可以通过调用系统自带的文件选择器实现查看、打开设备文件的需求,保存文件也能通过系统Intent完成。

打开/选择文件

通过Intent.ACTION_GET_CONTENT启动系统文件选择器,用户选择文件后在OnActivityResult中获取文件Uri,进而读取文件内容。

代码示例

先定义请求码:

private const int PickFileRequestCode = 1001;

触发文件选择的方法:

private void OpenFilePicker()
{
    var intent = new Intent(Intent.ActionGetContent);
    // 设置可选择的文件类型,"*/*"表示所有类型,也可指定如"text/plain"、"image/*"等
    intent.SetType("*/*");
    intent.AddCategory(Intent.CategoryOpenable);
    
    try
    {
        StartActivityForResult(Intent.CreateChooser(intent, "选择文件"), PickFileRequestCode);
    }
    catch (ActivityNotFoundException ex)
    {
        // 处理无文件选择器应用的情况
        Toast.MakeText(this, "未找到文件选择器应用", ToastLength.Short).Show();
    }
}

重写OnActivityResult处理返回结果:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
    
    if (requestCode == PickFileRequestCode && resultCode == Result.Ok && data != null)
    {
        Uri fileUri = data.Data;
        // 示例:读取文本文件内容
        using (var stream = ContentResolver.OpenInputStream(fileUri))
        using (var reader = new StreamReader(stream))
        {
            string content = reader.ReadToEnd();
            Toast.MakeText(this, $"已读取文件内容,长度:{content.Length}", ToastLength.Short).Show();
        }
    }
}

保存文件

通过Intent.ACTION_CREATE_DOCUMENT启动系统保存对话框,用户指定路径和文件名后,获取Uri并写入内容。

代码示例

定义保存请求码:

private const int SaveFileRequestCode = 1002;

触发保存对话框的方法:

private void OpenSaveFileDialog()
{
    var intent = new Intent(Intent.ActionCreateDocument);
    intent.AddCategory(Intent.CategoryOpenable);
    // 设置保存的文件类型,比如文本文件
    intent.SetType("text/plain");
    // 设置默认文件名
    intent.PutExtra(Intent.ExtraTitle, "新建文档.txt");
    
    try
    {
        StartActivityForResult(Intent.CreateChooser(intent, "保存文件"), SaveFileRequestCode);
    }
    catch (ActivityNotFoundException ex)
    {
        Toast.MakeText(this, "未找到文件保存应用", ToastLength.Short).Show();
    }
}

处理保存结果:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
    
    if (requestCode == SaveFileRequestCode && resultCode == Result.Ok && data != null)
    {
        Uri saveUri = data.Data;
        // 写入内容到指定Uri
        using (var stream = ContentResolver.OpenOutputStream(saveUri))
        using (var writer = new StreamWriter(stream))
        {
            string content = "这是要保存的文件内容";
            writer.Write(content);
            Toast.MakeText(this, "文件保存成功", ToastLength.Short).Show();
        }
    }
}

与Windows平台OpenFileDialog的差异

对比你提供的常规OpenFileDialog代码:

// Windows平台示例代码
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
    openFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
        string content = File.ReadAllText(openFileDialog.FileName);
    }
}

Xamarin Android无法直接实例化类似的对话框控件,必须依赖系统Intent调用原生文件选择器,通过回调获取结果——这是Android平台的设计规范,能统一用户体验,无需自己实现复杂的文件浏览逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:17:21