—— 大家都知道,数据和算法是一个应用程序的核心。所以,学好数据存储是非常有必要的。
——Android数据的存储有多种方式,比如ContentProvider(内容提供者)、SQLite(嵌入式数据库)存储、SharedPreferences存储、文件(File)存储等。文件(File)存储是最简单的数据存储方式,也是用得较少的一种数据存储方式。
——在这里,不知道大家有没有发现文件(File)存储似曾相识啊!没错,所谓的文件(File)存储不过是简单的Java.IO流罢了。那么,Java.IO流来到Android平台上怎么使用呢?不妨先想想,这就有点像老大来到一个有出息的小弟家做客,如果你是这个有出息的小弟,你该怎么做?不管怎样是不是先让个人去给老大带路呀!礼貌必不可少的。回到主题,为了让Java.IO流在安卓平台上起到好的发挥作用,这里需要使用Context来给老大带路!Context中都提供了相应的函数来支持,使用Context不但操作简单方便,最重要的是Context会帮助我们管理这些文件,也可以方便帮助我们控制文件的访问权限。
——了解Context的得力之处:(1)FileOutputStream out = context.openFileOutput(String filename,int mode); 以mode模式获得文件输出流,(2)out.write(byte[]b)。openFileOutput方法中有两个参数,filename是文件名(不包含路径),mode是代表模式,其中,mode模式有四种,MODE_PRIVATE:私有覆盖模式 (默认模式),MODE_APPEND:私有追加模式,注意:这两种模式只能被当前应用访问;还有两种模式在Android4.2以后被废除。默认情况下会将文件存储到/data/data//files的文件。
——很多文件存储的例子写的都不一样,你会发现一个大神写的是一样,另一个大神写的是一样,这里有必要归纳一下,一种是简单的版本(直接是上面说到的两个步骤),还有一种是复杂的版本(就是需要用到转换流和缓冲区等),根据需要来选择就好,最起码别人写的要看懂哈!知道是怎么一回事就行。下面贴出代码:
简单版:

/*** Created by Dell on 2017/3/22.*/
public class MyContextFile extends Activity {private EditText writeFileContent;private TextView displayContent;private Button writeFileButton,readFileButton;private String writeinfo;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.layout_file);initLayout();}private void initLayout(){writeFileContent=(EditText) findViewById(R.id.write_Edit);displayContent=(TextView) findViewById(R.id.display_textView);writeFileButton=(Button) findViewById(R.id.write_Button);readFileButton=(Button) findViewById(R.id.read_Button);writeFileButton.setOnClickListener(writeFileClickListener);readFileButton.setOnClickListener(readFileClickListener);}//将输入的信息写入到文件中View.OnClickListener writeFileClickListener=new View.OnClickListener() {@Overridepublic void onClick(View v) {//通过EditText获得输入的信息writeinfo=writeFileContent.getText().toString();FileOutputStream fileOutputStream=null;try {//通过openFileOutput()方法得的一个文件输出流fileOutputStream=openFileOutput("user.txt",MODE_PRIVATE);//将输入的信息写入到文件fileOutputStream.write(writeinfo.getBytes());Toast.makeText(MyContextFile.this, "写入文件成功",Toast.LENGTH_SHORT).show();}catch (FileNotFoundException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}finally {if (fileOutputStream!=null){try {fileOutputStream.close();//关闭文件流}catch (IOException e){e.printStackTrace();}fileOutputStream=null;}}}};//读取文件中的信息View.OnClickListener readFileClickListener=new View.OnClickListener() {@Overridepublic void onClick(View v) {FileInputStream fileInputStream=null;try {//通过openFileOutput()方法得的一个文件写入流fileInputStream=openFileInput("user.txt");//定义一个字节数组来缓存读取的字节byte[] cache=new byte[fileInputStream.available()];//读取文件fileInputStream.read(cache);displayContent.setText(":"+new String(cache));}catch (FileNotFoundException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}finally {if (fileInputStream!=null){try {fileInputStream.close();//关闭文件流}catch (IOException e){e.printStackTrace();}fileInputStream=null;}}}};
}

复杂版:

package com.xhm.demo.myandroidsql;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;/*** Created by Dell on 2017/3/22.*/
public class FileContext extends Activity {String data="data";FileOutputStream out=null;BufferedWriter bw=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);try {//调用Context.openFileOutput()方法获得java文件// 输出流(FileOutputStream)并返回对象out=openFileOutput("data", Context.MODE_PRIVATE);//借助FileOutputStream构建出一个OutputStreamWriter对象OutputStreamWriter osw=new OutputStreamWriter(out);//借助OutputStreamWriter构建出一个BufferedWriter对象bw=new BufferedWriter(osw);bw.write(data);//写内容  }catch (IOException e){e.printStackTrace();}finally {try {if (bw!=null){bw.close();//关闭文件流}}catch (IOException e){e.printStackTrace();}}}
}

——是不是觉得安卓文件存储很简单呀!是它和Java.IO流有关系而简单,也是因为它和Java.IO流有关系而复杂。上面的例子都是在安卓存储理想状态下执行的,请问你了解安卓的数据存储情况吗?有那些分类,各有什么不同、采取什么方式等等?
——学习就像考虑事情一样要周。接下来了解一下安卓的存储情况吧!Android存储空间分为内部存储空间(Internal Storage)和外部存储空间(External Storage)。简单的说就是手机内存和SD卡这两种存储空间。内部存储空间十分有限,因而显得可贵,所以我们要尽可能避免使用;另外,它也是系统本身和系统应用程序主要的数据存储所在地,一旦内部存储空间耗尽,手机 也就无法使用了。 使用内部存储主要有二个方式,一个是文件操作,一个是文件夹操作。注意:尤其是在开发应用程序是要为手机用户解应用数据到底存在哪里好?想想如果把手机用户的内存存了很多数据,内存用完用户会反感的,那如果我们把数据存到SD卡安全数不高也会引来用户的反感。那怎么办呢?这是值得考虑的,实在不行我们采取中庸之道,在存储数据之前我们先来判断用户手机内存和SD卡还剩多少内存,把数据存到内存最多的那个地方去,不痛不痒,妙
1.需要判断sd卡是否可用:

/*** Check if the primary "external" storage device is available.* * @return*/
public static boolean hasSDCardMounted() {String state = Environment.getExternalStorageState();if (state != null && state.equals(Environment.MEDIA_MOUNTED)) {return true;} else {return false;}
}

2.应用数据存放路径,同其他应用应该保持一致,应用卸载时,清除数据:
3.需要判断两者的可用空间:在API level 9及其以上时,File对象的getFreeSpace()方法获取系统root用户可用空间;
getUsableSpace()取非root用户可用空间。当有多个存储可用时获取磁盘用量,根据当前系统情况选用合适的存储。
根据系统存储用量,合理设定app所用的空间大小;运行时,也可做动态调整。

@TargetApi(VERSION_CODES.GINGERBREAD)
public static long getUsableSpace(File path) {if (path == null) {return -1;}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {return path.getUsableSpace();} else {if (!path.exists()) {return 0;} else {final StatFs stats = new StatFs(path.getPath());return (long) stats.getBlockSize() * (long) stats.getAvailableBlocks();}}
}

——内部存储的唯一缺点就是空间有限、珍贵;最大的有点就是安全数高(只允许本应用程序访问,且一旦删除应用程序,数据一会跟着被删除)。外部存储空间是指手机出厂的时候不存在,用户在使用时候可以自由添加的外部存储介质比如TS卡,SD卡等闪存储介质。其实安卓系统它是要依赖于外部存储卡的,因为对于Android系统,如果没有外部存储卡,很多 的系统应用无法使用,比如多媒体相关的应用程序无法使用。优点就是存储空间大,不用担心去清除数据。外部存储的缺点就是不是很稳定,对于Android手机来讲可以说,很不稳定,本身闪存介质就容易出问 题,SD卡处于不能正常使用的状态十分多。

Android数据存储之文件存储相关推荐

  1. Android数据持久化:文件存储

    数据持久化: 数据可分为瞬时数据和关键数据.保存在内存之中的数据是瞬时数据,而对于一些关键性数据,后期需要持续使用的,应当保存在存储设备中: 持久化保存方式: 文件存储.SharePreference ...

  2. 文件存储管理 android,Android数据持久化之文件存储

    一. 文件存储路径分类 1. 内部存储 内部存储是指在system分区(根目录)下的data/data/package name/下的文件. 这层目录普通用户和程序一般无法直接访问,当前应用的文件也只 ...

  3. Android 保存QQ密码(数据存储:文件存储、SharedPreferences)

    源码[工程文件]:https://gitee.com/lwx001/saveQQ MainActivity.java: package cn.lwx.saveqq;import android.os. ...

  4. Android(数据存储:文件存储、SharedPreferences)验证QQ密码

    前情提要1 :静态页面-简易QQ登录页面(纯activity_main.xml页面) [https://blog.csdn.net/weixin_44949135/article/details/10 ...

  5. android文件存储数组,Android面试简录——文件存储

    * SharedPreferences 请描述Android SDK支持哪些文件存储技术? 1.SharedPreferences保存key-value类型的数据 2.流文件存储(openFileOu ...

  6. android数据的五种存储方式

    Android提供了5种方式存储数据 1 使用SharedPreferences存储数据 它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息. 其存储位置在/da ...

  7. Android数据的四种存储方式

    很清晰的思路,转自Android数据的四种存储方式 作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQL ...

  8. Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储

    Android基础知识(二十一):Android五大存储之文件存储.Content Provider存储和网络存储 一.Android存储--持久化技术 数据持久化是指将那些内存中的瞬时数据保存到存储 ...

  9. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider...

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  10. 对象存储2:数据存储类型-文件存储、块存储、对象存储详解

    上一篇介绍了传统存储的几个常用类型,本篇主要介绍云平台用到的常用存储类型,分别是文件存储.块存储和对象存储. 这种分类是以数据存储的方式来命名的,体现了不同的数据存储格式.文件存储会以文件和文件夹的层 ...

最新文章

  1. Linux编程常见问题
  2. php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念 js里常用的如下 - phpStudy...
  3. python之WEB开发:图片管理
  4. oracle 如何创建序列squence
  5. linux实验四文件安全,西北农林科技大学Linux实验四 用户和文件安全
  6. 10大国外IT网站(转)
  7. 腾讯 2017 年投资项目榜单 TOP 10,与阿里死磕到底?
  8. [120_移动开发Android]007_android开发之SAX操作XML文件
  9. Qt之QListView使用
  10. 深入详解Java线程池——ThreadPoolExecutor
  11. QuickServer开发指南(1)- 介绍
  12. 淘宝API介绍-淘宝的 API 开放到什么程度?哪些数据是可以抓取的,哪些不能?
  13. ip数据库 纯真 mysql 查询_纯真IP数据库格式详解 附demo
  14. 计算机函数说课ppt,信息技术应用 用计算机画函数图象ppt专用说课稿内容
  15. Rose与PowerDesigner:两款UML建模工具的对比
  16. 扇贝python_扇贝编程(python)手机版-扇贝编程app下载v1.1.30-汉化新世纪
  17. 推荐几款高性价比电机驱动芯片
  18. Pytorch深度学习笔记(四)梯度向下算法
  19. kdbp是什么文件_DVF文件扩展名 - 什么是.dvf以及如何打开? - ReviverSoft
  20. LONGLONG类型

热门文章

  1. 基于无电离层组合/非差非组合混合观测模型的精密单点定位-阅读笔记
  2. 什么是论坛域名?论坛域名适用在哪些地方?
  3. hdmi网线延长器_HDMI单网线延长器HE200使用教程
  4. 64位处理器 计算机,32位与64位的处理器有什么区别?
  5. 小牛采购管理系统 v3.01 bt
  6. maya2018放大字体及窗口
  7. 八字易经算法之用JAVA实现排八字神煞
  8. 搭建exchange邮件服务器一定要ad域么?_域渗透神器-AD Explorer使用指南
  9. 才女!厦大硕士毕业生文言文致谢走红网络,理科生的文学素养令人惊艳
  10. 2021-2027全球与中国可待因药品市场现状及未来发展趋势