数据存储基本知识

Android系统提供了多种数据存储的方式,如下:

1:Shared Preferences:用来存储私有的、原始类型的、简单的数据,通常是Key-value对
2:Internal Storage:在设备内部存储器中存储数据
3:External Storage:在设备的扩展存储上保存数据,通常是SD卡
4:SQLite Databases:SQLite数据库
5:Network Connection:存储数据到网络服务器上

使用Shared Preferences

Shared Preferences是用来存储一些应用私有的、原始类型的、简单的数据的一个框架,保存的数据通常是Key-value对

要获得SharedPreferences对象,通常有两种方法:

1:getSharedPreferences():如果你想要使用多个preferences文件的话,可以通过传入一个识别的名称就可以获取到相应的SharedPreferences对象
2:getPreferences():如果一个preferences文件仅仅在当前的Activity中使用的话,你可以使用这个方法,无需要提供识别的名称。
使用SharedPreferences对象来获取数据非常简单,直接使用相应的getter方法即可

使用SharedPreferences对象来存储数据,大致有如下几步

1:调用edit()方法来得到SharedPreferences.Editor
2:调用相应的put方法值添加进去
3:调用commit来提交保存这些数据

向SharedPreferences对象写入数据

java代码:

查看复制到剪贴板打印
  1. SharedPreferences sp =getSharedPreferences("SP",Activity.MODE_PRIVATE);
  2. SharedPreferences.Editor editor = sp.edit();
  3. editor.putString("param1", "sp1");
  4. editor.putInt("param2", 222);
  5. editor.commit();

注意:所有的写入操作应该在一个Editor里面,也就是不要调用多次sp.edit()方法,每调用一次就会创建一个Editor

在获得SharedPreferences对象的时候,需要指定文件创建的模式:

1:MODE_PRIVATE:默认模式,文件只可以被调用该方法的应用程序访问
2:MODE_WORLD_READABLE:赋予所有的应用程序都可以读取该文件
3:MODE_WORLD_WRITEABLE:赋予所有的应用程序都可以写该文件
4:MODE_MULTI_PROCESS:SharedPreference的装载标记,设置它,文件将会在SharedPreference实例被装载到进程的时候检查是否被修改,主要用在一个应用有多个进程的情况。

从SharedPreferences对象读取数据

java代码:

查看复制到剪贴板打印
  1. SharedPreferences sp = T2.this.getSharedPreferences("SP",Activity.MODE_PRIVATE);
  2. String p1 = sp.getString("param1","");
  3. int p2 = sp.getInt("param2",0);

SharedPreferences的数据以xml存储在data/data/包名/shared_prefs下面

Internal Storage

当应用程序被安装到系统中后,其所在的包会有一个文件夹用于存放自己的数据,只有这个应用程序才有对这个文件夹的写入权限,这个私有的文件夹位于Android系统的/data/data/<应用程序包名>目录下,其他的应用程序都无法向这个文件夹中写入数据。
要读取应用自己的私有文件,就不能直接使用Java I/O的API了,需要使用Activity提供的方法:openFileInput或openFileOutput。

在使用openFileOutput方法的时候,需要指定打开的模式:

1:MODE_PRIVATE:默认模式,文件只可以被调用该方法的应用程序访问
2:MODE_APPEND:如果文件已存在就向该文件的末尾继续写入数据,而不是覆盖原来的数据。
3:MODE_WORLD_READABLE:赋予所有的应用程序对该文件读的权限。
4:MODE_WORLD_WRITEABLE:赋予所有的应用程序对该文件写的权限。

向应用对应的Internal Storage里面写入数据,这里以写对象来示例,如下:

java代码:

查看复制到剪贴板打印
  1. FileOutputStream fout = null;
  2. ObjectOutputStream os = null;
  3. try{
  4. fout = HelloWorldActivity.this.openFileOutput("MyData.txt",Activity.MODE_PRIVATE);
  5. os = new ObjectOutputStream(fout);
  6. os.writeObject(list);
  7. }catch(Exception err){err.printStackTrace();}
  8. finally{
  9. try {fout.close();}catch(IOException e1){e1.printStackTrace();}
  10. try {os.close();} catch(IOException e){e.printStackTrace();}
  11. }
  12. 不支持BufferedOutputStream

读取应用对应的Internal Storage里面的数据,这里以读取对象来示例,如下:

java代码:

查看复制到剪贴板打印
  1. FileInputStream fin = null;
  2. ObjectInputStream os = null;
  3. try{
  4. fin = HelloWorldActivity.this.openFileInput("MyData.txt");
  5. os = new ObjectInputStream(fin);
  6. Toast.makeText(HelloWorldActivity.this, "read file="+os.readObject(), Toast.LENGTH_LONG).show();
  7. }catch(Exception err){
  8. err.printStackTrace();
  9. }finally{
  10. try{fin.close();}catch(IOException e1){e1.printStackTrace();}
  11. try{os.close();}catch(IOException e){e.printStackTrace();}
  12. }
  13. 同样不支持BufferedInputStream

Internal Storage-保存Cache文件

如果你希望保存一些Cache数据,你可以使用getCacheDir() 来打开文件,将会把数据存储到一个临时的Cache文件里面。
当设备的内部存储空间低的时候,Android系统可能会清除这些Cache文件,以回收存储空间,这也意味着,你不能在Cache文件里面存储需要持久化的数据。

Internal Storage-其它常用方法

在Context中其他常用的方法:

1:getFilesDir()
得到内部存储的文件系统的绝对路径
2:getDir()
在内部存储中创建目录,如果存在的话就打开这个目录
3:deleteFile()
删除文件
4:fileList()
返回当前应用存储的文件列表

External Storage(操作SD卡)

Android的I/O基本上和Java的I/O是一样的,只有一点点不同的地方,比如:

1:需要加入sdcard的操作权限
2:需要判断sd卡是否存在,存在才能操作
3:放在sdcard的文件是公共的,而放到自己应用目录里面的文件才是私有的

常用的功能

1:在AndroidManifest.xml添加sdcard读写操作权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
2:在AndroidManifest.xml添加能创建和删除sdcard文件的操作权限
<uses-permission android:name= "android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
3:判断SD卡是否插入
Environment.getExternalStorageState().equals(android.os.Enviroment.MEDIA_MOUNTED)
4:获得SD卡根目录
Android7及以下版本,使用:Environment.getExternalStorageDirectory()可以获得如下路径“/Android/data/<package_name>/files/”
Android8及以上版本,建议使用:Context的getExternalFilesDir(type)方法,type表示你想要访问什么样的子目录,比如Environment.DIRECTORY_MUSIC,如果访问根目录,就传入null。

从SD卡上读文件,基本就是Java里面I/O的操作,这里以读对象为例:

java代码:

查看复制到剪贴板打印
  1. public Object readFile(String filePathName) {
  2. Object ret = null;
  3. FileInputStream fins = null;
  4. ObjectInputStream os = null;
  5. try {
  6. File file = new File(Environment.getExternalStorageDirectory() + filePathName);
  7. fins = new FileInputStream(file);
  8. os = new ObjectInputStream(fins);
  9. ret = os.readObject();
  10. } catch(Exception err){err.printStackTrace();}finally{
  11. try {fins.close();}catch(IOException e){e.printStackTrace();}
  12. try {os.close();}catch(IOException e){e.printStackTrace();}
  13. }
  14. return ret;
  15. }
  16. 比较遗憾的是,目前加上BufferedInputStream就出错

向SD卡上写文件,基本就是Java里面I/O的操作,这里以写对象为例:

java代码:

查看复制到剪贴板打印
  1. public void writefile(String filePathName,Object obj){
  2. FileOutputStream fouts = null;
  3. ObjectOutputStream os = null;
  4. try {
  5. File file = new File(Environment.getExternalStorageDirectory() +filePathName);
  6. if(file.getParentFile().isDirectory() && !file.getParentFile().exists()){
  7. file.getParentFile().mkdirs();
  8. }
  9. if(!file.exists()){ file.createNewFile(); }
  10. fouts = new FileOutputStream(file);
  11. os = new ObjectOutputStream(fouts);
  12. os.writeObject(obj);
  13. } catch (Exception err) {err.printStackTrace();
  14. }finally{
  15. try {fouts.close();}catch(IOException e){e.printStackTrace();}
  16. try {os.close();}catch(IOException e){e.printStackTrace();}
  17. }
  18. }
  19. 如果要保存成Cache文件,可以使用Context的getExternalCacheDir方法


视频配套PPT,视频地址【 Android4开发入门经典独家视频课程】

原创内容 转自请注明【 http://***/forum/blogPost/list/2746.html#7728】

数据存储基本知识

Android系统提供了多种数据存储的方式,如下:

1:Shared Preferences:用来存储私有的、原始类型的、简单的数据,通常是Key-value对
2:Internal Storage:在设备内部存储器中存储数据
3:External Storage:在设备的扩展存储上保存数据,通常是SD卡
4:SQLite Databases:SQLite数据库
5:Network Connection:存储数据到网络服务器上

使用Shared Preferences

Shared Preferences是用来存储一些应用私有的、原始类型的、简单的数据的一个框架,保存的数据通常是Key-value对

要获得SharedPreferences对象,通常有两种方法:

1:getSharedPreferences():如果你想要使用多个preferences文件的话,可以通过传入一个识别的名称就可以获取到相应的SharedPreferences对象
2:getPreferences():如果一个preferences文件仅仅在当前的Activity中使用的话,你可以使用这个方法,无需要提供识别的名称。
使用SharedPreferences对象来获取数据非常简单,直接使用相应的getter方法即可

使用SharedPreferences对象来存储数据,大致有如下几步

1:调用edit()方法来得到SharedPreferences.Editor
2:调用相应的put方法值添加进去
3:调用commit来提交保存这些数据

向SharedPreferences对象写入数据

java代码:

查看复制到剪贴板打印
  1. SharedPreferences sp =getSharedPreferences("SP",Activity.MODE_PRIVATE);
  2. SharedPreferences.Editor editor = sp.edit();
  3. editor.putString("param1", "sp1");
  4. editor.putInt("param2", 222);
  5. editor.commit();

注意:所有的写入操作应该在一个Editor里面,也就是不要调用多次sp.edit()方法,每调用一次就会创建一个Editor

在获得SharedPreferences对象的时候,需要指定文件创建的模式:

1:MODE_PRIVATE:默认模式,文件只可以被调用该方法的应用程序访问
2:MODE_WORLD_READABLE:赋予所有的应用程序都可以读取该文件
3:MODE_WORLD_WRITEABLE:赋予所有的应用程序都可以写该文件
4:MODE_MULTI_PROCESS:SharedPreference的装载标记,设置它,文件将会在SharedPreference实例被装载到进程的时候检查是否被修改,主要用在一个应用有多个进程的情况。

从SharedPreferences对象读取数据

java代码:

查看复制到剪贴板打印
  1. SharedPreferences sp = T2.this.getSharedPreferences("SP",Activity.MODE_PRIVATE);
  2. String p1 = sp.getString("param1","");
  3. int p2 = sp.getInt("param2",0);

SharedPreferences的数据以xml存储在data/data/包名/shared_prefs下面

Internal Storage

当应用程序被安装到系统中后,其所在的包会有一个文件夹用于存放自己的数据,只有这个应用程序才有对这个文件夹的写入权限,这个私有的文件夹位于Android系统的/data/data/<应用程序包名>目录下,其他的应用程序都无法向这个文件夹中写入数据。
要读取应用自己的私有文件,就不能直接使用Java I/O的API了,需要使用Activity提供的方法:openFileInput或openFileOutput。

在使用openFileOutput方法的时候,需要指定打开的模式:

1:MODE_PRIVATE:默认模式,文件只可以被调用该方法的应用程序访问
2:MODE_APPEND:如果文件已存在就向该文件的末尾继续写入数据,而不是覆盖原来的数据。
3:MODE_WORLD_READABLE:赋予所有的应用程序对该文件读的权限。
4:MODE_WORLD_WRITEABLE:赋予所有的应用程序对该文件写的权限。

向应用对应的Internal Storage里面写入数据,这里以写对象来示例,如下:

java代码:

查看复制到剪贴板打印
  1. FileOutputStream fout = null;
  2. ObjectOutputStream os = null;
  3. try{
  4. fout = HelloWorldActivity.this.openFileOutput("MyData.txt",Activity.MODE_PRIVATE);
  5. os = new ObjectOutputStream(fout);
  6. os.writeObject(list);
  7. }catch(Exception err){err.printStackTrace();}
  8. finally{
  9. try {fout.close();}catch(IOException e1){e1.printStackTrace();}
  10. try {os.close();} catch(IOException e){e.printStackTrace();}
  11. }
  12. 不支持BufferedOutputStream

读取应用对应的Internal Storage里面的数据,这里以读取对象来示例,如下:

java代码:

查看复制到剪贴板打印
  1. FileInputStream fin = null;
  2. ObjectInputStream os = null;
  3. try{
  4. fin = HelloWorldActivity.this.openFileInput("MyData.txt");
  5. os = new ObjectInputStream(fin);
  6. Toast.makeText(HelloWorldActivity.this, "read file="+os.readObject(), Toast.LENGTH_LONG).show();
  7. }catch(Exception err){
  8. err.printStackTrace();
  9. }finally{
  10. try{fin.close();}catch(IOException e1){e1.printStackTrace();}
  11. try{os.close();}catch(IOException e){e.printStackTrace();}
  12. }
  13. 同样不支持BufferedInputStream

Internal Storage-保存Cache文件

如果你希望保存一些Cache数据,你可以使用getCacheDir() 来打开文件,将会把数据存储到一个临时的Cache文件里面。
当设备的内部存储空间低的时候,Android系统可能会清除这些Cache文件,以回收存储空间,这也意味着,你不能在Cache文件里面存储需要持久化的数据。

Internal Storage-其它常用方法

在Context中其他常用的方法:

1:getFilesDir()
得到内部存储的文件系统的绝对路径
2:getDir()
在内部存储中创建目录,如果存在的话就打开这个目录
3:deleteFile()
删除文件
4:fileList()
返回当前应用存储的文件列表

External Storage(操作SD卡)

Android的I/O基本上和Java的I/O是一样的,只有一点点不同的地方,比如:

1:需要加入sdcard的操作权限
2:需要判断sd卡是否存在,存在才能操作
3:放在sdcard的文件是公共的,而放到自己应用目录里面的文件才是私有的

常用的功能

1:在AndroidManifest.xml添加sdcard读写操作权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
2:在AndroidManifest.xml添加能创建和删除sdcard文件的操作权限
<uses-permission android:name= "android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
3:判断SD卡是否插入
Environment.getExternalStorageState().equals(android.os.Enviroment.MEDIA_MOUNTED)
4:获得SD卡根目录
Android7及以下版本,使用:Environment.getExternalStorageDirectory()可以获得如下路径“/Android/data/<package_name>/files/”
Android8及以上版本,建议使用:Context的getExternalFilesDir(type)方法,type表示你想要访问什么样的子目录,比如Environment.DIRECTORY_MUSIC,如果访问根目录,就传入null。

从SD卡上读文件,基本就是Java里面I/O的操作,这里以读对象为例:

java代码:

查看复制到剪贴板打印
  1. public Object readFile(String filePathName) {
  2. Object ret = null;
  3. FileInputStream fins = null;
  4. ObjectInputStream os = null;
  5. try {
  6. File file = new File(Environment.getExternalStorageDirectory() + filePathName);
  7. fins = new FileInputStream(file);
  8. os = new ObjectInputStream(fins);
  9. ret = os.readObject();
  10. } catch(Exception err){err.printStackTrace();}finally{
  11. try {fins.close();}catch(IOException e){e.printStackTrace();}
  12. try {os.close();}catch(IOException e){e.printStackTrace();}
  13. }
  14. return ret;
  15. }
  16. 比较遗憾的是,目前加上BufferedInputStream就出错

向SD卡上写文件,基本就是Java里面I/O的操作,这里以写对象为例:

java代码:

查看复制到剪贴板打印
  1. public void writefile(String filePathName,Object obj){
  2. FileOutputStream fouts = null;
  3. ObjectOutputStream os = null;
  4. try {
  5. File file = new File(Environment.getExternalStorageDirectory() +filePathName);
  6. if(file.getParentFile().isDirectory() && !file.getParentFile().exists()){
  7. file.getParentFile().mkdirs();
  8. }
  9. if(!file.exists()){ file.createNewFile(); }
  10. fouts = new FileOutputStream(file);
  11. os = new ObjectOutputStream(fouts);
  12. os.writeObject(obj);
  13. } catch (Exception err) {err.printStackTrace();
  14. }finally{
  15. try {fouts.close();}catch(IOException e){e.printStackTrace();}
  16. try {os.close();}catch(IOException e){e.printStackTrace();}
  17. }
  18. }
  19. 如果要保存成Cache文件,可以使用Context的getExternalCacheDir方法

视频配套PPT,视频地址【 Android4开发入门经典独家视频课程】
原创内容 转自请注明【 http://***/forum/blogPost/list/2746.html#7728】

转载于:https://www.cnblogs.com/helloandroid1/archive/2012/08/06/2624538.html

Android4开发入门经典 之 第七部分:数据存储相关推荐

  1. Android4开发入门经典 之 第十二部分:最佳实践

    性能提升 有两个编写有效代码的基本规则: 1:不要做你不需要做的. 2:不分配没必要分配的内存. 应该尽量避免创建多余的对象,比如: 1:在一组输入数据中抽取字符串时,尝试返回源数据的子串,而非创建一 ...

  2. Android4开发入门经典 之 第十二部分:最佳实践【私塾在线原创】

    性能提升 有两个编写有效代码的基本规则: 1:不要做你不需要做的. 2:不分配没必要分配的内存. 应该尽量避免创建多余的对象,比如: 1:在一组输入数据中抽取字符串时,尝试返回源数据的子串,而非创建一 ...

  3. Android4开发入门经典 之 第四部分:用户界面

    基本概念 常用Widgets和布局 常用的Widgets TextView.Button. EditText.CheckBox.RadioGroup.RadioButton.Spinner.Progr ...

  4. 《iOS 8应用开发入门经典(第6版)》——第1章,第1.6节小结

    本节书摘来自异步社区<iOS 8应用开发入门经典(第6版)>一书中的第1章,第1.6节小结,作者 [美]John Ray(约翰 雷),更多章节内容可以访问云栖社区"异步社区&qu ...

  5. 《Android应用开发入门经典(第3版)》——第6.1节创建演示应用

    本节书摘来自异步社区<Android应用开发入门经典(第3版)>一书中的第6章,第6.1节创建演示应用,作者 [美]Carmen Delessio , Lauren Darcey , Sh ...

  6. 《iOS 9应用开发入门经典(第7版)》——第2章,第2.4节小结

    本节书摘来自异步社区<iOS 9应用开发入门经典(第7版)>一书中的第2章,第2.4节小结,作者 [美]约翰 雷(John Ray),更多章节内容可以访问云栖社区"异步社区&qu ...

  7. 谷歌眼镜开发入门经典

    2019独角兽企业重金招聘Python工程师标准>>> 谷歌眼镜开发入门经典 Google Glass将是目前以及未来几年风靡全球的革命性的移动计算平台,<谷歌眼镜开发入门经典 ...

  8. 《Android应用开发入门经典(第3版)》——导读

    本节书摘来自异步社区<Android应用开发入门经典(第3版)>一书中的目录,作者 [美]Carmen Delessio , Lauren Darcey , Shane Conder,更多 ...

  9. HTML5移动应用开发入门经典 中文pdf扫描版

    HTML5是关注度ZUI高的前沿Web技术,而移动互联网则是近两年ZUI炙手可热的Web领域.<HTML5移动应用开发入门经典>将这两者巧妙结合起来,详细讲解了如何利用HTML5进行移动应 ...

最新文章

  1. python lambda 逻辑_Python之lambda表达式和内置函数
  2. 2017-2018-1 20155226 20155234 《信息安全系统设计基础》 实验一总结
  3. 聚集索引和非聚集索引
  4. 用友 提示“尚有已全部暂估报销的单据未进行处理,不能进行12月的期末处理!”...
  5. Linux中Shell的命令替换用法笔记
  6. arm opcode hook
  7. 数据结构--红黑树 Red Black Tree
  8. C++: error: call of overloaded ‘abs(int)’ is ambiguous
  9. python, 面向对象编程Object Oriented Programming(OOP)
  10. 【三维路径规划】基于matlab蚁群算法无人机三维路径规划【含Matlab源码 1278期】
  11. 软件测试的功能点理解
  12. Oracle long 类型转 varchar2
  13. 精度LiDAR-Monocular Visual Odometry
  14. 懂点excel作图, 怎么让pyechart作的图更具“职场范“呢?丨pyechart工作作图模板
  15. 浑浑噩噩10年,入坑软件测试,6年干到测试leader,非科班的我也能当程序员!
  16. unity检测范围内敌人_unity_小功能实现(敌人追踪主角)
  17. 醉逍遥显示无法更新服务器,蜀门醉逍遥版本修改教程 (值好几千,俺心血).doc
  18. 解决uniapp的 swiper 组件的随着指示点添加背景宽度不随着内容添加而自动扩大问题,而是溢出。
  19. 一只公鸡5块钱,一只母鸡3块钱,3只小鸡一块钱,一个农夫用100块钱买100只鸡(不许解方程),怎么实现?编写java程序。...
  20. 软件测试的定义是什么?

热门文章

  1. 使用Server 2008新GPO做驱动器映射
  2. 《无线网络:理解和应对互联网环境下网络互连所带来的挑战》——第2章 无线生态系统 2.1无线标准化过程...
  3. ServerSocketChannel API用法
  4. 用jquery写一个属于自己的音乐播放器
  5. javax.servlet.jsp.JspTagException:
  6. 二手房买卖砍价最新攻略 帮你花少钱买好房
  7. Linux系统目录结构及主要内容
  8. Python面试题总结(6)--数据类型(综合)
  9. 深度学习之卷积神经网络 ZF Net
  10. python中tkinter的使用-中