数据的访问与存储

Android有五种数据存储方式:文件存储、SharedPreferences、SQLite数据库、ContentProvider、网络存储。

文件存储: 通过I/O流读写文件,跟Java是一样的,一般用来存储一些较大的数据,如文本、图片、音频、视频等。
SharePreferences: Android中用来存储一些配置信息的方式,XML格式。
SQLite数据库: Android中一种轻量级的数据库,支持SQL语法。
ContentProvider: Android四大组件之一,可实现应用程序之间的数据交换,实现数据共享。
网络存储: 通过将数据存储到服务器,从而实现数据的存储。

文件存储

一种常见的存储方式,类似于Java的I/O流的读取/写入,可存储文本、图片、音频、视频等等。
1.内部存储
内部存储是指将应用程序中的数据以文件的方式存储到设备内部,为所创建的应用程序私有,如果有其他应用程序想要访问该数据,需要访问权限,该数据随着应用程序的消亡而消亡。

//输出流FileOutputStream fos = openFileOutput(String name, int mode);//文件名+操作String content = "要输出的数据";byte[] buffer = content.getBytes();//建立缓冲fos.write(buffer);//写入数据fos.close();//关闭输出流//输入流FileInputStream fis = openFileInput(String name);//文件名byte[] buffer = new byte[fis.available()];//建立缓冲fis.read(buffer);//读取缓冲区fis.close();//关闭输入流

openFileOutput()用来打开应用程序对应输出流,将数据存储到指定文件中;openFileInput()用于打开应用程序对应的输入流,读取指定文件中的数据。

mode的四种取值:
MODE_PRIVATE:只能当前程序读写
MODE_APPEND:可追加内容
MODE_WORLD_READABLE:可被其他应用程序读取
MODE_WORLD_WRITEABLE:可被其他应用程序写入
(注意:文件输入输出流要添加try/catch语句)

File file1 = getFilesDir();//获得当前应用在内部存储上的根目录File file2 = new File(file1, "文件名");//在指定目录创建文件夹File file3 = getCacheDir();//获得缓存目录,该目录在系统空间不足时会被清理deleteFile("文件名");//删除文件

2.外部存储
外部存储是指将文件存储到外部设备上,SD卡、内嵌存储卡等等,是永久性存储,可被其他应用所共享,但这种存储方式不安全,因为可被轻易地浏览、修改和删除。

String state = Environment.getExternalStorageState();//获取外部设备if(state.equals(Environment.MEDIA_MOUNTED)){//判断是否存在外部设备File SDPath = Environment.getExternalStorageDirectory();//获取SD卡目录}

Android系统为例保证应用程序的安全性做了相关规定,如果程序需要访问系统的关键信息,必须在清单文件中申明权限才可以,否则程序会崩溃。操作SD卡的数据是系统中比较重要的,所以需要在清单文件的中t添加SD卡读写权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

在Android6.0以后出于安全考虑,还要在代码中动态申请权限:

private static final int REQUEST_CODE = 1;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        RequestPermission();//申请权限    }    void RequestPermission() {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)        if (!(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)) {            String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE};            requestPermissions(permissions, REQUEST_CODE);        }    }    //权限回调    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        if (requestCode == REQUEST_CODE) {            int grantResult = grantResults[0];            boolean granted = grantResult == PackageManager.PERMISSION_GRANTED;        }    }

更多相关文章

  1. Android——SQLite数据库
  2. Android使用JDBC连接mysql数据库
  3. Android layout文件中 '?' 的作用
  4. Android平板电脑上的APP应用程序设计须知
  5. :如何安装apk文件在Android仿真器中
  6. 使用html,javascript,css,phonegap创建开发android应用程序
  7. Android 高效的SQLite型数据库greenDAO使用
  8. Android五种常用数据的存储方式
  9. Android的架构与Android应用程序启动流程

随机推荐

  1. Java并发编程学习3-可见性和对象发布
  2. 如何预测您的用户即将流失?
  3. 国标目录查询以及订阅
  4. js引入方式、变量与常量的声明与使用方式
  5. Apache Spark 2.1.0正式发布,Structured S
  6. Spark 2.0介绍:Catalog API介绍和使用
  7. springboot 打印sql日志
  8. 浅谈信息技术在石油行业数字化转型中的运
  9. 页面布局有哪些技巧?前端页面怎么写?
  10. 用x种方式求第n项斐波那契数,99%的人只会