Android 数据存储
概述
-
文件存储 特点:openFileInput()和openFileOutput()读取设备上的文件。
-
SharedPreferences 特点:以XML格式将数据存储到设备。
-
SQLite数据库 特点:运算速度快,占用资源少,还支持基本SQL语法。
-
ContentProvider 特点:应用程序之间的数据交换,可以将自己的数据共享给其他应用程序使用。
-
网络存储 特点:通过网络提供的存储空间来存储/获取数据信息。
文件存储
存储位置
现在认为 内部存储是指应用自己能够操控的存储空间(应用自己的空间)。除此之外是外部存储。
存入内部存储
写入内部存储,不需要申请权限,直接读写即可。
FileOutputStream fos = openFileOutput(String name, int mode); FileInputStream fis = openFileInput(String name); String fileName = "data.txt"; // 文件名称 String content = "helloworld"; // 保存数据 FileOutputStream fos = openFileOutput(fileName, MODE_PRIVATE); fos.write(content.getBytes()); fos.close(); //关闭输出流
mode取值:
- MODE_PRIVATE:该文件只能被当前程序读写
- MODE_APPEND:该文件的内容可以追加;
- MODE_WORLD_READABLE:该文件的内容可以被其他程序读;
- MODE_WORLD_WRITEABLE:该文件的内容可以被其他程序写
注意:Android系统有一套自己的安全模型,默认情况下任何应用创建的文件都是私有的,其他程序无法访问。
读取内部存储中的文件的数据
String content = ""; FileInputStream fis = null; fis = openFileInput("data.txt"); //获得文件输入流对象 byte[] buffer = new byte[fis.available()]; fis.read(buffer); content = new String(buffer);//转换成字符串 fis.close(); //关闭输入流
存储外部存储
读入
String state = Environment.getExternalStorageState();//获取外部设备的状态 if (state.equals(Environment.MEDIA_MOUNTED)) {//判断外部设备是否可用 File SDPath = Environment.getExternalStorageDirectory();//获取SD卡目录 File file = new File(SDPath, "data.txt"); String data = "HelloWorld"; FileOutputStream fos = new FileOutputStream(file); fos.write(data.getBytes()); fos.close(); }
读取外部存储中的文件数据
String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { File SDPath = Environment.getExternalStorageDirectory(); //获取SD卡路径 File file = new File(SDPath, "data.txt"); //创建文件对象 FileInputStream fis = null; BufferedReader br = null; fis = new FileInputStream(file); //创建文件输入流对象 //创建字符输入缓冲流的对象 br = new BufferedReader(new InputStreamReader(fis)); String data = br.readLine(); //读取数据 br.close(); //关闭字符输入缓冲流 fis.close(); //关闭输入流 }
动态申请权限
Android系统规定,程序访问系统的一些关键信息时,必须申请权限,否则程序运行时会因为没有访问系统信息的权限而直接崩溃。
申请权限方式 分为静态和动态
动态申请权限,适用系统版本:Android 6.0及以上
流程是:
- 先判断有没有权限
- 没有权限,申请权限
- 判断用户否是同意权限
- 如果同意,正常进行程序; 如果不同意,xxxx
// 动态申请权限的方法 ActivityCompat.requestPermissions(MainActivity.this, new String[]{"android.permission.WRITE_EXTERNAL_STORAGE"}, 1); //申请权限的回调方法 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); } //用户授予权限的结果,当用户授予权限时,该数组中对应的值为PackageManager.PERMISSION_GRANTED
SharedPreferences存储
将数据存入SharedPreferences中
SharedPreferences:是Android平台上一个轻量级的存储类,用于程序中一些少量数据持久化存储。
以key/value(键值对)的形式保存数据,value值只能是float、int、long、boolean、String、Set<String>
类型数据。
SharedPreferences sp = getSharedPreferences("data",MODE_PRIVATE);//名字不要加.xml,系统会自动加.xml SharedPreferences.Editor editor = sp.edit(); editor.putString("name", "传智播客");// 存入String类型数据 editor.putInt("age", 8); // 存入int类型数据 editor.commit();
读取和删除数据
//读取SharedPreferences文件中的数据。 SharedPreferences sp = getSharedPreferences("data",MODE_PRIVATE); String data= sp.getString("name",""); //删除SharedPreferences文件中的数据。 editor.remove("name"); editor.clear();
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/17374845.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步