博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android】14.1 内部文件存储和读取
阅读量:6489 次
发布时间:2019-06-24

本文共 4150 字,大约阅读时间需要 13 分钟。

分类:C#、Android、VS2015;

创建日期:2016-02-27

一、简介

内部存储(Internal storage)是指将应用程序建立的私有文件保存在内部存储器(移动经销商卖的那种容量较小的手机卡)中。其特征如下:

  • 总是可用的
  • 文件默认只能被自己的app所访问。
  • 当用户卸载app的时候,系统会把internal内该app相关的文件都清除。
  • Internal storage是确保不被用户与其他app所访问的最佳存储区域。

可通过OpenFileInput方法和OpenFileOutput方法读取内部存储设备上的这些文件。

1、私有目录的存储位置

     /data/data/[packagename]/files:文件目录,一般保存容量较小的文件,如果是图片,不建议保存这里。

     /data/data/[packagename]/cache:缓存目录。

     /data/data/[packagename]/databases,存放数据库。

     /data/data/[packagename]/shared_prefs 保存应用的SharedPreferences。

     /data/data/[packagename]/lib,应用程序使用的.so文件目录。

2、OpenFileOutput方法

该方法打开应用程序私有文件,为写入设备做准备。默认情况下,写入的文件会覆盖同名的原文件。如果要打开的文件不存在,则创建一个新文件。

该方法的语法格式如下:

public override Stream OpenFileOutput(string name, FileCreationMode mode)

通过mode参数可更改文件写入的方式:

  • FileCreationMode.Private:私有模式(默认)。文件只能被创建的程序访问,或被具有相同UID的程序访问。
  • FileCreationMode.Append:追加模式,文件不存在就先创建再添加,存在就在原文件的末尾添加新数据。
  • FileCreationMode.WorldReadable:全局读模式,允许任何程序读取私有文件。
  • FileCreationMode.WorldWriteable:全局写模式,允许任何程序写入私有文件。

例如:

    string fileName="a1.txt";

    var f=OpenFileOutput(fileName, FileCreationMode.Private);

   string text="some data";

    byte[] bytes = System.Text.Encoding.UTF8.GetBytes(str);

    f.Write(bytes, 0, bytes.Length);

    f.Flush ();

    f.Close();

注意:出于性能考虑,Android会把写入的数据先暂存到数据缓冲区中,等积累到一定程度再写入文件,因此,调用Close方法之前,一定要调用Flush方法,以确保将缓冲区的数据写入文件。

另外,为了避免忘记关闭Stream引起内存溢出,最好像本节下面的完整例子那样用using语句将其包围起来。

3、OpenFileInput方法

该方法打开应用程序私有文件,为读取做准备。该方法的语法格式如下:

public override Stream OpenFileInput(string name)

注意:name是指不带路径的文件名。

不论是读文件还是写文件,都有可能产生异常,实际使用时,始终不要忘了用try/catch捕获这些异常。作为例子,为了避免冲淡关注的内容,就不再捕获这些异常了。

4、System.IO.File类提供的静态方法

除了上面两种方式外,还可以直接用.NET提供的System.IO.File类的静态方法来读取和写入内部存储文件,而且用起来更简单。

二、示例

1、运行截图

 

2、设计步骤

(1)添加ch1401_Main.axml文件

(2)添加ch1401MainActivity.cs文件

using System.IO;using System.Text;using Android.App;using Android.Content;using Android.OS;using Android.Widget;namespace MyDemos.SrcDemos{    [Activity(Label = "【例14-1】内部文件存取")]    public class ch1401MainActivity : Activity    {        private Stream stream;        private string fileName = "a1.txt";        protected override void OnCreate(Bundle savedInstanceState)        {            base.OnCreate(savedInstanceState);            SetContentView(Resource.Layout.ch1401_Main);            stream = OpenFileOutput(fileName, FileCreationMode.Private);            string filePath = GetFileStreamPath(fileName).Path;            var textView1 = FindViewById
(Resource.Id.textView1); Button btnWrite = FindViewById

转载于:https://www.cnblogs.com/rainmj/p/5223679.html

你可能感兴趣的文章
mysql备份时候两个很有用的参数
查看>>
SpringBoot(三)_controller的使用
查看>>
[开学季] 新余学院阿里云大数据应用学院举办2018级新生阿里云大咖课堂暨开学第一课...
查看>>
08 pandas DataFrame - 多层Series简介、相互转换
查看>>
Confluence 6 为 Active Directory 配置一个 SSL 连接预要求
查看>>
django 开发微信退款功能
查看>>
Activiti 6.x【10】BoundaryEvent【下】
查看>>
每日文献:2018-02-27
查看>>
服务器开发入门——理解异步I/O
查看>>
如何在 Kubernetes 环境中搭建 MySQL (二):在 cloud native 环境下配置 MySQL 的几个关键点...
查看>>
LinkedBlockingQueue源码解析
查看>>
Kotlin 1.3 新特性抢先看,协程已稳定并将向后兼容
查看>>
Parat-基于kali2018的远程管理工具
查看>>
ES6(正则扩展)
查看>>
从零玩转jQuery-核心函数和静态方法
查看>>
8月3日科技联播:新型VR头盔可令盲人重获光明 ,联通阿里成立合资企业“云粒智慧”...
查看>>
Jeknins的Pipline方式构建任务
查看>>
Python全栈 项目(电子词典、协程、pdb调试)
查看>>
(周期计划-7)常用集合的源码分析:ArrayList
查看>>
“分叉并商品化”,GitLab 和 Elastic 炮轰 AWS 的开源方法
查看>>