笔记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 条评论
登录 后参与评论

相关文章

来自专栏编码小白

activiti学习笔记(六) 监听器

activiti全局监听器 全局监听器主要使用的场景就是监控这个流程的启动和结束。流程开始的时候可以监控,流程结束的时候也可以监控 监听器的接口 public ...

8156
来自专栏java学习

常见的Mybatis面试题详细讲解大全

2、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?

1225
来自专栏Python中文社区

一种Python全局配置规范以及其修改

專 欄 ❈丁果,Python中文社区作者。对django、pyqt、opencv、tornado感兴趣。 GitHub:https://github.com/...

2219
来自专栏程序猿DD

Spring Batch:文件的批量读写Flatfile(XML,CSV,TXT)

继杨小强童鞋的《Spring Batch入门篇》之后,继续为大家分享第二篇关于Spring Batch的系列教程。 更多内容请持续关注:spring4all.c...

2687
来自专栏Rgc

使用line_profiler查看api接口函数每行代码执行时间

项目情景描述:   在restful架构风格的项目交付测试的过程中,某接口出现 请求超时导致的http 502 Bad Gateway,于是开始排查具体是接口函...

3304
来自专栏程序猿

枚举算法(Enumeration algorithm)实例一

(建议电脑看原文链接,平台的排版不太好,太累了。)描述:在n位的整数中,例如153可以满足1^3 + 5^3 + 3^3 = 153,这样的数称...

3436
来自专栏一直在跳坑然后爬坑

Flutter “跳转页面”(二)前言正文

写了这么多文章,有翻译文档的,有自己理解的,也不知道到底是怎么样的风格更能让人接受,希望大家能给点意见或建议。

1072
来自专栏Java技术

Spring Session解决分布式Session问题的实现原理

使用Spring Session和Redis解决分布式Session跨域共享问题

692
来自专栏difcareer的技术笔记

JNI实现源码分析【三 间接引用表】正文0x01: IndirectRefTable0x02: 作用域0x03: jobject到Object的映射0x04: JNI在背后默默做的事

在JNI实现源码分析【二 数据结构】的参数传递一节中,我们提到,JNI为了安全性的考虑使用了形如jobject的结构来传递参数。而jobject被表述为指针,但...

612
来自专栏林德熙的博客

WPF 开发

如果使用NamedPipeServerStream、Mutex做单实例,需要传入字符串,这时如果传入一个固定的字符串,会在多用户的时候无法使用。

591

扫码关注云+社区