首页 > 其他分享 >Android 数据存储

Android 数据存储

时间:2023-05-05 17:33:16浏览次数:58  
标签:fis 存储 String fos new Android 权限 数据

概述

image

  • 文件存储 特点:openFileInput()和openFileOutput()读取设备上的文件。

  • SharedPreferences 特点:以XML格式将数据存储到设备。

  • SQLite数据库 特点:运算速度快,占用资源少,还支持基本SQL语法。

  • ContentProvider 特点:应用程序之间的数据交换,可以将自己的数据共享给其他应用程序使用。

  • 网络存储 特点:通过网络提供的存储空间来存储/获取数据信息。

文件存储

存储位置

现在认为 内部存储是指应用自己能够操控的存储空间(应用自己的空间)。除此之外是外部存储。
image

存入内部存储

写入内部存储,不需要申请权限,直接读写即可。

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及以上

流程是:

  1. 先判断有没有权限
  2. 没有权限,申请权限
  3. 判断用户否是同意权限
  4. 如果同意,正常进行程序; 如果不同意,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

标签:fis,存储,String,fos,new,Android,权限,数据
From: https://www.cnblogs.com/kingwz/p/17374845.html

相关文章

  • DataTable添加数据
       在ASP.NET中添加数据到DataTable可以使用以下步骤: 1.创建DataTable对象: DataTabledt=newDataTable(); 2.添加列名: dt.Columns.Add("列名1");dt.Columns.Add("列名2");dt.Columns.Add("列名3"); 3.添加行数据: DataRowrow1=dt.NewRow();ro......
  • C#连接数据库
    第一步先在配置文件中写入数据库的配置信息<addname="connString"connectionString="server=服务器名;database=数据库名;uid=登录名;pwd=登录密码"/><connectionStrings><addname="connString"connectionString="server=LIN;database=Tes......
  • 修改数据库实例、修改数据库、修改数据表、修改数据,编码、排序规则
    查实例字符集showvariableslike'%character%';查实例排序规则showvariableslike'%collation%';查库语句showcreatedatabasetest;查表排序规则showtablestatusfromtestlike'test_saas_single';查字段排序规则showfullcolumnsfromtest_saas_single;......
  • Django--数据及字段的增删改查
    字段的增删改查#增pwd=models.IntegerField(verbose_name="密码",null=True)#verbose_name说明;null可以为空is_delete=models.CharField(default=0)#设置为默认值#改直接改代码然后执行数据库迁移命令即可#删注释掉代码然后执行数据库迁移命令即可数据的......
  • Android 程序活动单元Activity
    点击按钮页面跳转在xxxActivity类,创建按钮对象对按钮对象创建匿名内部类监听器记得选View.OnClickListener()在内部类建立Intent跳转对象:newIntent(原界面,目标界面)Intentintent=newIntent(LoginActivity.this,MainActivity.class);使用startActivity启动跳转......
  • android压力测试命令monkey详解
    一、Monkey是什么?Monkey就是SDK中附带的一个工具。二、Monkey测试的目的?:该工具用于进行压力测试。然后开发人员结合monkey打印的日志和系统打印的日志,结局测试中出现的问题。三、Monkey测试的特点?Monkey测试,所有的事件都是随机产生的,不带任何人的主观性。四、Monkey命令......
  • el-select数据太多造成页面卡顿?el-select实现触底加载
    当我们使用el-select下拉框的时候,会遇到后端放回的数据太过庞大(成千上万条),导致页面渲染的时候造成卡顿现象。这时候我们可以利用触底加载方法减少资源的消耗,避免页面卡顿。思路:这时候我们可以利用vue的自定义指令,监听到他的下拉滚动事件,当滚动到最后时,(下拉宽高度+可滑动高度距离......
  • python笔记-数据类型
    获取数据类型type(val)iftype(1)==int:print('1是int类型')iftype('hello')==str:print('1是字符串类型')iftype(1.5)==float:print('1是float类型')iftype([1,2])==list:print('1是list类型')类型转换prin......
  • 3 第三章 内建数据结构、函数及文件
    Python编程:从入门到实践元组可以使用tuple函数将任意序列或迭代器转换为元组;可以使用+号连接元组来生成更长的元组;将元组乘以整数,则会生成含有多份拷贝的元组元组拆包In[15]:tup=(4,5,6)In[16]:a,b,c=tupIn[17]:b0ut[17]:5交换变量名:In[21]:a,b=1,......
  • apipost利用预执行脚本生成不同的测试数据
    apipost利用预执行脚本生成随机的测试数据完整流程使用JavaScript编写预执行脚本进入自动化测试功能界面新建自动化测试,添加接口进去配置执行次数和间隔完成简单介绍apipost提供了强大的接口测试功能,方便我们进行接口测试的各种操作具体步骤1.使用JavaScript编写预......