当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢?

数据存储方式

Android 的数据存储有5种方式:

1. SharedPreferences存储数据
   SharedPreferences数据存储,也叫作xml存储。这是将数据存储“data/data/程序包名/share_prefs”路径下的到xml文件中。
相关连接:《Android中数据存储——SharedPreferences存储数据 》  
2. 文件存储数据
   分为内部储存和外部存储。内部存储是应用程序使用Android为自己分配的内存空间,数据存储到“/data/data/程序包名/files”路径下的相应文件中。外部存储是使用手机sdcard的内存(这个sdcard并不是我们经常说的那个可以拆卸替换的SD卡,那个SD卡我们称之为扩展卡),使用这部分内存要声明相应的权限。  
相关连接:《Android中数据存储——文件存储数据》 
3. SQLite数据库存储数据
  使用数据库进行存储,这个一般数据量比较大的时候。
相关连接:《Android中数据存储——SQLite数据库存储数据 》 
4. 使用ContentProvider存储数据
  这个比较眼熟,ContentProvider也是Android的四大组件之一。ContentProvider一般是第三方提供的数据存储方式,向我们手机中的通讯录联系人,照片,音乐等……  
相关连接:《Android中数据存储——ContentProvider存储数据 》
5. 网络存储数据
   这个是将数据上传到网络上进行存储。

   
  下面进入我们今天的主要内容,使用文件存储数据。

文件存储数据

  文件存储是Android中最基本的一种存储方式,他不对存储的内容进行任何格式化的处理,所有的数据都是原封不动的保存在文件中的,因此他比较适合于存储一些简单的二进制数据或文本数据。
  文件存储也分两种:内部存储和外部存储。
  

内部存储

  指Android为应用程序分配的内存。
  通过Context类中封装好的输入流和输出流的获取方法获得数据/data/data//files目录下存储的数据。

files目录下写数据

  通过Context的封装好的方法 openFileOutput(String filename, int mode)获得数据流:
String filename参数:在/data/data//files目录下存储时的文件名。
int mode参数:文件的操作模式,主要有两种模式可选择:MODE_PRIVATEMODE_APPEND。默认为MODE_PRIVATE,当指定相同文件名进行读写的时候,新的内容会覆盖原有内容;MODE_APPEND模式会在已存在的文件的最后追加新的内容。除此之外有两种模式:MODE_WORLD_READABLEMODE_WORLD_WRITEABLE,这两种模式表示允许其他应用程序对我们的程序文件进行读写操作。

        try {            FileOutputStream fileOutputStream = openFileOutput("cache_text", MODE_PRIVATE);            PrintWriter writer = new PrintWriter(new OutputStreamWriter(fileOutputStream));            writer.write("你好缓存!");            writer.flush();            writer.close();            fileOutputStream.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }

files目录下读数据

   通过Context的封装好的方法 openFileInput(String filename)获得数据流:
String filename参数:在/data/data//files目录下读取时的文件名。

    try {            FileInputStream fileInputStream = openFileInput("cache_text");            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));            String line = bufferedReader.readLine();            while (line != null) {                Log.d("data", "" + line);                line = bufferedReader.readLine();            }            bufferedReader.close();            fileInputStream.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }

  通过Context类中getCacheDir()方法获得”/data/data//cache“目录,创建相关的文件存储数据。

cache目录下写数据

        File file = new File(getCacheDir(), "cache_dir_text");//创建/data/data/<package name>/cache/cache_dir_text文件对象。        if (!file.exists()) {            try {                file.createNewFile();//如果文件不存在,则创建                FileOutputStream fos = new FileOutputStream(file);                PrintWriter writer = new PrintWriter(new OutputStreamWriter(fos));                writer.write("你好缓存!啊啊啊啊");                writer.flush();                writer.close();            } catch (IOException e) {                e.printStackTrace();            }        }

cache目录下读数据  

        File file = new File(getCacheDir(), "cache_dir_text");        try {            FileInputStream fis = new FileInputStream(file);            BufferedReader br = new BufferedReader(new InputStreamReader(fis));            String line = br.readLine();            while(line!=null){                Log.d("data", " " + line);                line = br.readLine();            }            br.close();            fis.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }

外部存储

  手机的内存空间,手机内置sdCard(非扩展卡)。使用外部存储要在AndroidManifext.xml中加入访问权限:

    <!-- 允许程序写入外部存储,如SD卡上写文件-->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

写数据

        //创建sccard_text文件对象,由于不同手机SDcard目录不同,所以我们通过Environment.getExternalStorageDirectory()获得路径。        File file = new File(Environment.getExternalStorageDirectory(), "sccard_text");        if (!file.exists()){            try {                file.createNewFile();            } catch (IOException e) {                e.printStackTrace();            }        }        try {            FileOutputStream fos =new FileOutputStream(file);            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));            bw.write("你好啊");            bw.flush();            bw.close();            fos.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }

读数据

         File file = new File(Environment.getExternalStorageDirectory(), "sccard_text");        try {            FileInputStream fis = new FileInputStream(file);            BufferedReader br =  new BufferedReader(new InputStreamReader(fis));            String line = br.readLine();            while(line!=null){                Log.d("data", " " + line);                line = br.readLine();            }            br.close();            fis.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. python起点网月票榜字体反爬案例
  3. NPM 和webpack 的基础使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. 读取android手机流量信息
  6. android 使用html5作布局文件: webview跟javascript交互
  7. 《Android开发从零开始》——25.数据存储(4)
  8. Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
  9. Android系统配置数据库注释(settings.db)

随机推荐

  1. 获取Android设备电池信息
  2. Qt 5.7.0 (32 bit) 配置 Android 环境
  3. Android(安卓)Debug Bridge
  4. android之发送短信的方法研究
  5. Android Apk脱壳(360加固)
  6. Android 后台发邮件
  7. Android Activity间的过渡动画
  8. Android控制台命令am简介
  9. android 实现按钮旋转720°
  10. Android(安卓)拍照或从相册取图片并裁剪