笔记44 | 数据存储之File存储最简单地实现

地址

CSDN:http://blog.csdn.net/xiangyong_1521/article/details/78665993 简书:http://www.jianshu.com/p/736dd7b63ece


目录

  • 概念
  • 存储
  • 读取

概念

文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中的。它比较适合用于存储一些简单的文本数据或二进制数据。


存储

Context 类中提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件中。

这个方法接收两个参数,第一个参数是文件创建时使用的名称,注意这里指定的文件名不可以包含路径,因为所有文件都是默认储存到 /data/data/<包名>/files/ 目录下的。

第二个参数是文件的操作模式,主要有两种模式可选:

MODE_PRIVATE(覆盖原文) MODE_APPEND(追加内容) 。

openFileOutput() 方法返回的是一个 FileOutputStream 对象,得到这个对象之后就可以使用 Java 流的方式将数据写入到文件中了。

int i = 0;    String md = " data";    FileOutputStream fileOutputStream;    BufferedWriter bufferedWriter;    private void inSave() {        try {            String out = md + (i++);            //设置文件名称,以及存储方式            fileOutputStream = openFileOutput("md.txt",Context.MODE_APPEND);            //创建一个OutputStreamWriter对象,传入BufferedWriter的构造器中            bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream));            //向文件中写入数据            bufferedWriter.write(out);        } catch (IOException e) {            e.printStackTrace();        } finally{            try {                bufferedWriter.close();            } catch (Exception e2) {            }        }    }

读取

类似于将数据存储到文件中,Context 类中还提供了一个 openFileInput() 方法,用于从文件中读取数据。

openFileInput() 方法只接收一个参数,即要读取的文件名,然后系统会自动到 /data/data/<包名>/files/ 目录下去加载这个文件,并返回一个 FileInputStream 对象。

BufferedReader bufferedReader;    FileInputStream fileInputStream;    StringBuilder builder;    private void inRead() {        try {            //设置将要打开的存储文件名称            fileInputStream = openFileInput("md.txt");            //FileInputStream -> InputStreamReader ->BufferedReader            bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));            //读取每一行数据,并追加到StringBuilder对象中,直到结束            builder = new StringBuilder();            String line = new String();            //读取每一行数据,并追加到StringBuilder对象中,直到结束            while ((line = bufferedReader.readLine()) != null) {                builder.append(line);                textView.setText(""+builder);            }        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } finally {            if (bufferedReader != null) {                try {                    bufferedReader.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }

其他

如果不能判定一部手机是否存在sdcard,如果没有,则需要提供其他解决方法,比如 保存到手机存储; 提示不存在sdcard; 可以使用:

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){      //执行存储sdcard方法  }  else{      //存储到手机中,或提示   Toast.makeText(this, "读取失败,SD卡不存在!", Toast.LENGTH_LONG).show();}


原文发布于微信公众号 - 项勇(xiangy_life)

原文发表时间:2017-11-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Script Boy (CN-SIMO)

文件随机读写专用类——RandomAccessFile

 RandomAccessFile类可以随机读取文件,但是在测试中并不好用; File类可以测试文件存不存在,不存在可以创建文件; FileWriter类可...

2120
来自专栏码匠的流水账

聊聊spring cloud gateway的ForwardedHeadersFilter

本文主要研究一下spring cloud gateway的ForwardedHeadersFilter

792
来自专栏技术/开源

TypeScript设计模式之单例、建造者、原型

看看用TypeScript怎样实现常见的设计模式,顺便复习一下。 学模式最重要的不是记UML,而是知道什么模式可以解决什么样的问题,在做项目时碰到问题可以想到...

2186
来自专栏容器云生态

Golang读写文件操作

最近在使用Golang进行文件读写的过程中,遇到几个细节问题导致程序写入数据时有一定脏数据的残留,最后发现是使用os.OpenFile在进行文件操作的时候没有使...

7437
来自专栏java学习

Java基础总结大全(4)

最新通知 ●回复"每日一练"获取以前的题目! ●【新】Android视频更新了!(回复【安卓视频】获取下载链接) ●【新】Ajax知识点视频更新了!(回复【学习...

35113
来自专栏Java与Android技术栈

使用Kotlin高效地开发Android App(二)总结

继上一篇文章介绍了项目中所使用的Kotlin特性,本文继续整理当前项目所用到的特性。

1022
来自专栏流柯技术学院

关于lr调用jar在vuser中可以运行,但是controller中却报错的问题

如题,错误如下:javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces....

922
来自专栏我是攻城师

Java如何调用Linux命令

3986
来自专栏码农分享

1.HtmlAgilityPack 爬取优酷电影名

爬虫的制作主要分为三个方面 1、加载网页结构 2、解析网页结构,转变为符合需求的数据实体 3、保存数据实体(数据库,文本等)

962
来自专栏何俊林

Android Multimedia框架总结(二十一)MediaCodec中创建到start过程(到jni部分)

最近我正在参加CSDN 2016年度博客之星评选,如果我的文章对你曾有过帮助,不妨点击文末【阅读原文】给我投上一票, 时间:11月28日到12月18日每天都可以...

2236

扫码关注云+社区