文件存储是Android中最基本的一种数据存储方式,它不读存储的内容进行任何的格式化处理,所有数据原封不动的保存在文件之中。如果想用文件存储的方式保存一些较为复杂的数据,就需要定义一套自己的格式规范,这样方便之后将数据从文件中解析出来。

一、将数据存储到文件中

  context类提供一个openFileOutput()方法,可以用于将数据存储到指定文件中。openFileOutput()接收两个参数,第一个指定文件名,文件名不可以包含路径,因为所有的文件都是默认存储到/data/data/<package name>/files/目录下;第二个参数指定文件的操作模式,主要有两种模式可选,MODE_PRIVATE模式为默认模式,所写的内容将覆盖原文件的内容,MODE_APPEND表示如果该文件已经存在,则向文件中追加内容,如果不存在则新建一个文件。openFileOutput()返回一个FileOutputStream

  1、Java中将流分为2种,即字节流,字符流,

    字节流的中最小的字节单位是字节,而字符流的最小单位是一个字符,Java的字符采用unicode编码,一个字符占据2个字节。

    字节流:InputStream,OutputStrem,

    字符流:Reader,Writer

    

    

    2. 如何选择IO流

     1)确定是数据源和数据目的(输入还是输出)

             源:输入流 InputStream Reader
                  目的:输出流 OutputStream Writer

        2)明确操作的数据对象是否是纯文本

          是:字符流Reader,Writer
                 否:字节流InputStream,OutputStream

      3)明确具体的设备。

              是硬盘文件:File++:

           读取:FileInputStream,, FileReader,

           写入:FileOutputStream,FileWriter
                 是内存用数组

         byte[]:ByteArrayInputStream, ByteArrayOutputStream
                      是char[]:CharArrayReader, CharArrayWriter
                 是String:StringBufferInputStream(已过时,因为其只能用于String的每个字符都是8位的字符串), StringReader, StringWriter
                 是网络用Socket流

       是键盘:用System.in(是一个InputStream对象)读取,用System.out(是一个OutoutStream对象)打印

      3)是否需要转换流

             是,就使用转换流,从Stream转化为Reader,Writer:InputStreamReader,OutputStreamWriter

     4)是否需要缓冲提高效率

     是就加上Buffered:BufferedInputStream, BufferedOuputStream, BuffereaReader, BufferedWriter

二、将数据从文件中读出来

  context提供一个openFileInput()方法读取文件的内容,只有一个形参,即要读取的文件名称。返回一个FileInputStream流,通过这个流来读取文件内容。

三、示例代码如下

public class MainActivity extends AppCompatActivity {
EditText edit1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit1 = (EditText) findViewById(R.id.edit1);
String data = load();
if(!TextUtils.isEmpty(data)){
edit1.setText(data);
edit1.setSelection(data.length());
}
}
@Override
protected void onDestroy() {
super.onDestroy();
save(edit1.getText().toString());
}
public void save(String data){
BufferedWriter writer = null;
FileOutputStream out = null;
try {
out = openFileOutput("storage_test",MODE_APPEND);
writer = new BufferedWriter(new OutputStreamWriter(out));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
writer.write(data);
} catch (IOException e) {
e.printStackTrace();
}
if (writer!=null){
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public String load(){
FileInputStream in = null;
BufferedReader reader = null;
StringBuffer content = new StringBuffer();
try {
in = openFileInput("storage_test");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
reader = new BufferedReader(new InputStreamReader(in));
String data = "";
try {
while ((data = reader.readLine())!=null){
content.append(data);
}
} catch (IOException e) {
e.printStackTrace();
}
if(reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return content.toString();
}
}

Android文件存储的更多相关文章

  1. Android 文件存储浅析

    最近做的一个需求和文件存储有关系.由于之前没有系统梳理过,对文件存储方面的知识一直很懵懂.趁着周末有时间,赶紧梳理一波. 这首从网上找到的一张图,很好的概括了外部存储和内部存储. 下面我们再来具体介绍 ...

  2. android: 文件存储

    数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑 关机的情况下,这些数据仍然不会丢失.保存在内存中的数据是处于瞬时状态的,而保存在 存储设备中的数据是处于持久状态的,持久化 ...

  3. android文件存储位置切换

    最近有个需求,助手的google卫星地图和OpenCycleMap下载的离线地图数据,要能够在内置存储和外置存储空间之间切换,因为离线瓦片数据非常大,很多户外用户希望将这些文件存储在外置TF卡上,不占 ...

  4. 转:Android文件存储路径getFilesDir()与getExternalFilesDir的区别

    作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过: File sdCard = Environment.getExternalStorageDirectory(); 获取S ...

  5. android 文件存储&SharedPreferences

    一.文件存储 文件存储主要是I/O流的操作,没什么好说的,需要注意的是保存文件的各个目录. 下面为常用的目录: public static File getInFileDir(Context cont ...

  6. 程序员带你学习安卓开发系列-Android文件存储

    这是程序员带你学习安卓开发系列教程.本文章致力于面向对象程序员可以快速学习开发安卓技术. 上篇文章:.Net程序员快速学习安卓开发-布局和点击事件的写法 主要讲解了布局和点击事件的写法. 上篇文章补充 ...

  7. Android文件存储使用参考

    可能遇到的问题 android系统自身自带有存储,另外也可以通过sd卡来扩充存储空间.前者好比pc中的硬盘,后者好移动硬盘. 前者空间较小,后者空间大,但后者不一定可用. 开发应用,处理本地数据存取时 ...

  8. Android 文件存储 和 权限管理

    转载请标明出处: :http://blog.csdn.net/huaiyiheyuan/article/details/52473984 android SD卡主要有两种存储方式 Internal . ...

  9. Android数据存储之Android 6.0运行时权限下文件存储的思考

    前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以 ...

随机推荐

  1. CentOS-7下安装MySQL5.6.22

    参考: http://www.2cto.com/database/201501/371451.html 安装环境   CentOS版本:CentOS-7 因为之前安装过,没有成功,但是有之前安装的文件 ...

  2. android 设计

    引用:http://my.eoe.cn/blue_rain/archive/3631.html 1.一些概念 模式的定义: 每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案 ...

  3. jQuery入门教程

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博客地址为http://www.cnblogs.com/jasonnode/ .网站上有对应每一 ...

  4. Microsoft SQL Server 数据库服务器管理维护角色

    固定服务器角色: 按照从最低级别的角色(bulkadmin)到最高级别的角色(sysadmin)的顺序进行描述: Bulkadmin:这个服务器角色的成员可以运行BULK INSERT语句.这条语句允 ...

  5. IE6不支持min-heightt和min-width的解决办法

    IE6不支持min-height的解决办法 最小高度min-height是很有用的,但IE6却不支持.真烦人.有没有办法呢? 我们可以利用IE6不识别!important来实现: height:aut ...

  6. dr.wondr博士随笔之某古旧非智能机T6XXX 恢复一例

    大家好!欢迎再次来到dr.Wonde的微博! 今次我给大家带来索尼爱立信古董机T650i的取证工作展示! 首先请出今天我们的主角索尼爱立信 T650i>> 然后在工厂模式下,连接设备,看图 ...

  7. List view优化

    ListView 针对每个item,要求 adapter "返回一个视图" (getView),也就是说ListView在开始绘制的时候,系统首先调用getCount()函数,根据 ...

  8. ubuntu执行sudo apt-get update提示缺少公钥

    提示信息如下: 获取:1 http://archive.ubuntukylin.com:10006/ubuntukylin xenial InRelease [3,192 B] 命中:2 http:/ ...

  9. MVC系列1-MVC基础 (ASP.NET)

    终于决定写一个系列的文章了,最开始其实是准备写一下WPF的,因为我这两年一直在做WPF,对WPF的喜爱自然是无以言表.但是由于我所在的地区对WPF的普及不是很广泛,所以,被迫又开始做起来web,但是我 ...

  10. [已解决][HTML5]基于WebSocket开发小蝌蚪应用

    前端时间在网上看到别人用WebSocket开发的小蝌蚪应用很炫酷,不过是php,于是想着用java也实现一套, 找到前端 https://github.com/danielmahal/Rumpetro ...