Android四种文件存储

Stella981
• 阅读 550

Android有四种文件存储方式,分别是sharepreference,file,SQlite(数据库),内容提供者;

第二种文件存储,我们先来了解下sharepreference:

简单理解,它是一种简单方便体量小的数据存储方式,通常用于存储程序的配置信息,比如控件勾选状态,登录信息;自身并不能编辑数据,只能通过他的对象editor进行编辑;

他的使用步骤是:

存储:

1,在主类中定义类成员变量shareprefence sp;

2,在主方法中初始化sp,sp=getSharePrefence;

3,获取编辑器,Editor editor =sp.edit();

4,editor.putString(“key”,”name”)/putBoolean(“key”,”false”)

5, editor.commit();提交数据

Android四种文件存储

Android四种文件存储

读取:

sp.getStirng(“key”,””)/sp.getBoolean(“key”,””);空内容为“ ”,也可以设置默认值“这是一个默认值”;

Android四种文件存储

第二种文件存储:file

1,文件存储有两种方式,一种是储存在软件本身的目录下:/data/data/包名/文件名;/data/cache/包名/文件名;对应的上下文API分别是:this.getFileDir和this.getCacheDir

2,类似方便的API还有:“openFileOutput”

FileOutputStream fos = openFileOutput("info.txt", MODE_PRIVATE);等同于

File file=new File(this.getFileDir(),"info.txt");
FileOutputStream fos=new FileOutputStream(file);

Android四种文件存储

3,初步了解几种文件访问的模式 分别是:

openFileOutput("文件名","文件的访问模式"); 私有 只读 只写 可读可写

Android四种文件存储

4,文件储存于SD卡

(A)重点认识:Environment. 是内存卡相关的方便API,提供内存卡的相关上下文信息,与全局的context不同,范围更小;

/*
* 判断内存卡状态的方法是:
* 第一:Environment.getExternalStorageState()返回内存卡状态信息,返回值是String类型;
* 第二:拿到Environment.的上下文与返回值作比较即可;
*/

String state=Environment.getExternalStorageState();               
                if (Environment.MEDIA_MOUNTED.equals(state)) {

Toast.makeText(MainActivity.this, "内存卡可用"+"可用空间为"+info, 0).show();

}else{
                    Toast.makeText(MainActivity.this, "内存卡不可用", 0).show();    
        }

(B)了解formatter,并且知道如何判断外部存储大小

/*

*
* 获取内存存储大小方法如下:
* 第一:通过api拿到文件路径,创建文件
* 第二:通过file文件里面的getFreeSpace()方法获取可用空间
* 第三:拿到格式化器formatter对其格式化formatter.formatFileSize()即可;

Android四种文件存储

小程序:

Android四种文件存储

Android四种文件存储

Android四种文件存储

Android四种文件存储

第三种存储方式:SQlite

数据库是一种可以存储固定格式的文件,而SQlite是一种轻量级的数据库,其创建丶存储和修改的过程是:

1,创建一个打开数据库的帮助类;

Android四种文件存储

ps:帮助类中只是帮我们创建一个表格,数据库的升级只能由低到高;

Android四种文件存储

2,//执行下面的一行代码,数据库是不会别创建的了。
        MyDbOpenHelper helper = new MyDbOpenHelper(this);
        //如果想创建数据库必须执行,下一行代码
        helper.getWritableDatabase();

      Android四种文件存储

3,数据库的增删改查,可通过API进行增删改查:ps》》》每一次对数据库的操作都需要执行以下代码

MyDBOpenHelper helper = new MyDBOpenHelper(this);

SQLiteDatabase db = helper.getWritableDatabase(); 所以,在db.dao包中,一般会创建有参构造方法,写入以下代码,提高代码复用性(1,提取公共参数;2,使用dao类时,要让“对象”每次都执行,只能通过有参构造方法):

public class StudentDao {
   
    private StudentDBOpenHelper helper;
    /**
     * 没有无参的构造方法,只能用下面的构造方法去初始化dao
     * @param context
     */
    public StudentDao(Context context) {
        helper = new StudentDBOpenHelper(context);
    }

Android四种文件存储

  **  第一:添加数据:**

/**
     * 添加一条数据
     */
    public void add(View view) {
        // 执行下面的一行代码,数据库是不会别创建的了。
        MyDBOpenHelper helper = new MyDBOpenHelper(this);
        // 如果想创建数据库必须执行,下一行代码
        SQLiteDatabase db = helper.getWritableDatabase();
        Random random = new Random();
        // db.execSQL("insert into info (name,phone) values (?,?)", new Object[]
        // {
        // "王五" + random.nextInt(100), "110-" + random.nextInt(100) });
        ContentValues values = new ContentValues();
        values.put("name", "王五" + random.nextInt(100));
        values.put("phone", "110-" + random.nextInt(100));
        long id = db.insert("info", null, values);// 通过组拼sql语句
        db.close();
        if (id != -1) {
            Toast.makeText(this, "添加成功,在第" + id + "行", 0).show();
        } else {
            Toast.makeText(this, "添加失败", 0).show();
        }
    }

Android四种文件存储

第二:修改数据

/**
     * 删除一条数据
     */
    public void delete(View view) {
        // 执行下面的一行代码,数据库是不会别创建的了。
        MyDBOpenHelper helper = new MyDBOpenHelper(this);
        // 如果想创建数据库必须执行,下一行代码
        SQLiteDatabase db = helper.getWritableDatabase();
        // db.execSQL("delete from info ");
        int result = db.delete("info", null, null);
        db.close();
        if (result == 0) {
            Toast.makeText(this, "删除失败", 0).show();
        } else {
            Toast.makeText(this, "删除了"+result+"条记录", 0).show();
            // 再去查询一次。
        }
    }

Android四种文件存储

第三:删除数据

/**
     * 修改一条数据
     */
    public void update(View view) {
        // 执行下面的一行代码,数据库是不会别创建的了。
        MyDBOpenHelper helper = new MyDBOpenHelper(this);
        // 如果想创建数据库必须执行,下一行代码
        SQLiteDatabase db = helper.getWritableDatabase();
        //db.execSQL("update info set phone=?", new Object[] { "8888" });
        ContentValues values = new ContentValues();
        values.put("phone", "99999");
        int result = db.update("info", values, null, null);
        db.close();
        if (result == 0) {
            Toast.makeText(this, "修改了0条记录", 0).show();
        } else {
            Toast.makeText(this, "修改了"+result+"条记录", 0).show();
        }
    }

Android四种文件存储

第四:查询数据

/**
     * 查询全部数据
     */
    public void query(View view) {
        // 执行下面的一行代码,数据库是不会别创建的了。
        MyDBOpenHelper helper = new MyDBOpenHelper(this);
        // 如果想创建数据库必须执行,下一行代码
        SQLiteDatabase db = helper.getReadableDatabase();
        //Cursor cursor = db.rawQuery("select * from info", null);
        Cursor cursor = db.query("info", new String[]{"name","phone","_id"}, null, null, null, null, null);
        while (cursor.moveToNext()) {
            String name = cursor.getString(0);
            String phone = cursor.getString(1);
            String id = cursor.getString(2);
            System.out.println("id:" + id + "--name:" + name + "--phone"
                    + phone);
            System.out.println("----");
        }
        // 记得用完数据库 关闭cursor
        cursor.close();
        db.close();
    }

Android四种文件存储

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这